MVC 3布局页面,剃刀模板和DropdownList

我想在网站的所有页面中包含年份的下拉列表。 我假设把这个逻辑放在布局页面(_layout.cshtml)的好地方。 如果用户更改年份,我想更改我的年份会话(ModelBinder)以更改。 这对于ASP.NET Web表单来说非常简单,但在MVC中似乎几乎不可能。 我尝试了一个没有运气的局部视图。 任何人有任何想法?

像往常一样,您可以从定义视图模型开始:

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"); } } } 

然后一个控制器:

 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(); } } 

以及索引操作的相应视图:

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

最后在你的_Layout.cshtml里面你可以使用这个控制器:

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

并附加一个相应的脚本,当值发生变化时会发送一个AJAX请求:

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