在MVCrazor回来后,maintaning下降选定状态?

在MVC 4 Web中,我有下面的示例代码下拉列表:

@(Html.DropDownList("Condition2", new SelectList(Model.Makes, "CCultureId", "CTitle"), "All",new {@class="span3"})) 

我将All作为选择和按下按钮的第一个选项,页面显示其中的数据。 回帖后,下拉按钮按下按钮重置,你能指导我如何在页面回发后保持其状态下降(我明白在MVC4中没有回发,我认为它是一次往返服务器的回程)。

一种方法是在控制器中返回模型中提交的值。 这意味着您的下拉列表应该连接到您的viewmodel。

视图模型:

 public class MyViewModel { // more properties... public string Make {get;set;} // more properties } 

控制器:

 [HttpPost] public ActionResult MyAction(MyViewModel model) { // do postback stuff return View(model); // model.Make is set to whatever was submitted and will be returned } 

HTML:

 @model Models.MyViewModel @(Html.DropDownListFor(m => m.Make, new SelectList(Model.Makes, "CCultureId", "CTitle", Model.Make), "All", new {@class="span3"})) 

您可以使用Viewbag保存所选项目,请参阅blew:

采取行动

 [HttpGet] public ActionResult YourAction() { ViewBag.SelectedItem = ""; /// return View(new yourViewModel); } 

发布行动

 [HttpPost] public ActionResult YourAction(FormCollection form,YourViewModel model) { ViewBag.SelectedItem = form["Condition2"]; /// return View(model); } 

视图

 @(Html.DropDownList("Condition2", new SelectList(Model.Makes, "CCultureId", "CTitle",ViewBag.SelectedItem), "All",new {@class="span3"})) 

你可以使用? 运算符,它的工作方式与此类似,并使用selectlistitem的Selected属性

 Console.WriteLine((2 == 2 ? "true" : "false")); 

然后例如

 private Entities en = new Entities(); public ActionResult Index(string selectedvalue) { List selectlist = en.tblUser.Select(x => new SelectListItem { Text = x.Name, Value = x.Id, Selected = ( x.Name == selectedvalue ? false : true) }) .ToList(); ViewBag.DropDown = selectlist; return View(); } 

然后在视图中你简单地说这个

 @Html.DropDownList("DropDownName", (List)ViewBag.DropDown)) 

显然不推荐使用viewbag,而是使用带有list属性的模型。