我想在我的网站的所有页面包括一个下拉列表的年。我假设一个好的地方放这个逻辑是在布局页面(_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) { }); }); });