2011-01-12 27 views
33

Tôi muốn bao gồm danh sách thả xuống các năm trên tất cả các trang trong trang web của mình. Tôi giả định một nơi tốt để đặt logic này là trong trang bố trí (_layout.cshtml). Nếu người dùng thay đổi năm tôi muốn thay đổi phiên của tôi (ModelBinder) để thay đổi là tốt. Điều này rất dễ dàng để làm với các hình thức web ASP.NET, nhưng dường như gần như không thể làm trong MVC. Tôi đã thử xem một phần không có may mắn. Có ai có ý kiến ​​gì không?Trang Giao diện MVC 3, Mẫu dao cạo và Danh sách thả xuống

+0

gì vấn đề cụ thể được bạn trải qua? – marcind

Trả lời

88

Như thường lệ, bạn có thể bắt đầu bằng cách xác định một mô hình điểm:

public class YearsViewModel 
{ 
    public string Year { get; set; } 
    public IEnumerable<SelectListItem> Years 
    { 
     get 
     { 
      return new SelectList(
       Enumerable.Range(1900, 112) 
       .OrderByDescending(year => year) 
       .Select(year => new SelectListItem 
       { 
        Value = year.ToString(), 
        Text = year.ToString() 
       } 
      ), "Value", "Text"); 
     } 
    } 
} 

Sau đó, một bộ điều khiển:

public class YearsController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new YearsViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(int year) 
    { 
     // TODO: do something with the selected year 
     return new EmptyResult(); 
    } 
} 

và một cái nhìn tương ứng cho action index:

@model SomeAppName.Models.YearsViewModel 
@{ 
    Layout = null; 
} 
@Html.DropDownListFor(x => x.Year, Model.Years) 

Và cuối cùng bên trong _Layout.cshtml bạn có thể sử dụng bộ điều khiển này:

<div id="selectyear">@Html.Action("index", "years")</div> 

và đính kèm một kịch bản tương ứng mà sẽ gửi một yêu cầu AJAX khi thay đổi giá trị:

$(function() { 
    $('#selectyear select').change(function() { 
     $.post('@Url.Action("index", "years")', { year: $(this).val() }, function (result) { 

     }); 
    }); 
}); 
+1

Hoàn hảo !!!! Cảm ơn bạn rất nhiều vì sự giúp đỡ! –

+0

@Sam, bạn được chào đón. –

+0

Tuyệt vời. Điều chỉnh nó cho một bộ chọn quốc gia mà không gặp rắc rối gì cả. Cảm ơn tải. –

Các vấn đề liên quan