33
我想在我的網站的所有頁面中包括一個下拉列表中的年份。我假設了一個放置這個邏輯的好地方,那就是佈局頁面(_layout.cshtml)。如果用戶更改年份,我想更改年份會話(ModelBinder)以更改。這很容易處理ASP.NET Web表單,但在MVC中似乎幾乎不可能。我嘗試了一個沒有運氣的局部視圖。任何人有任何想法?MVC 3佈局頁面,剃刀模板和DropdownList
我想在我的網站的所有頁面中包括一個下拉列表中的年份。我假設了一個放置這個邏輯的好地方,那就是佈局頁面(_layout.cshtml)。如果用戶更改年份,我想更改年份會話(ModelBinder)以更改。這很容易處理ASP.NET Web表單,但在MVC中似乎幾乎不可能。我嘗試了一個沒有運氣的局部視圖。任何人有任何想法?MVC 3佈局頁面,剃刀模板和DropdownList
像往常一樣,你可以通過定義視圖模型開始:
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) {
});
});
});
完美!!!!十分感謝你的幫助! – 2011-01-13 18:47:01
您遇到什麼特殊的問題? – marcind 2011-01-12 21:44:15