2011-01-12 87 views
33

我想在我的網站的所有頁面中包括一個下拉列表中的年份。我假設了一個放置這個邏輯的好地方,那就是佈局頁面(_layout.cshtml)。如果用戶更改年份,我想更改年份會話(ModelBinder)以更改。這很容易處理ASP.NET Web表單,但在MVC中似乎幾乎不可能。我嘗試了一個沒有運氣的局部視圖。任何人有任何想法?MVC 3佈局頁面,剃刀模板和DropdownList

+0

您遇到什麼特殊的問題? – marcind 2011-01-12 21:44:15

回答

88

像往常一樣,你可以通過定義視圖模型開始:

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) { 

     }); 
    }); 
}); 
+1

完美!!!!十分感謝你的幫助! – 2011-01-13 18:47:01