在asp.net mvc3中如何在回发后保持下拉列表选中项目。
答案 0 :(得分:2)
做这样的事情:
[HttpPost]
public ActionResult Create(FormCollection collection)
{ if (TryUpdateModel(yourmodel))
{ //your logic
return RedirectToAction("Index");
}
int selectedvalue = Convert.ToInt32(collection["selectedValue"]);
ViewData["dropdownlist"] = new SelectList(getAllEvents.ToList(), "EventID", "Name", selectedvalue);// your dropdownlist
return View();
}
在视图中:
<%: Html.DropDownListFor(model => model.ProductID, (SelectList)ViewData["dropdownlist"])%>
答案 1 :(得分:2)
更简单,您可以在ActionResult输入参数中包含下拉列表的名称。您的下拉列表应该是表单标签。当ActionResult发布到,ASP.Net将遍历查询字符串,表单值和cookie。只要包含下拉列表名称,就会保留选定的值。
这里我有一个包含3个下拉列表的表单,这些表单会发布到ActionResult。下拉列表名称(不区分大小写):ReportName,Year和Month。
//MAKE SURE TO ACCEPT THE VALUES FOR REPORTNAME, YEAR, AND MONTH SO THAT THEY PERSIST IN THE DROPDOWNS EVEN AFTER POST!!!!
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ReportSelection(string reportName, string year, string month)
{
PopulateFilterDrowdowns();
return View("NameOfMyView");
}
答案 2 :(得分:1)
MVC不使用ViewState,这意味着您需要自己管理值持久性。通常,这是通过您的模型完成的。因此,假设您有一个视图模型,例如:
public class MyViewModel { }
你的控制器:
public class MyController : Controller
{
public ActionResult Something()
{
return View(new MyViewModel());
}
public ActionResult Something(MyViewModel model)
{
if (!ModelState.IsValid)
return View(model);
return RedirectToAction("Index");
}
}
现在,当您使用数据(可能不正确 - 验证失败)将模型传递回视图时,当您使用DropDownListFor
方法时,只需传入值:
@Model.DropDownListFor(m => m.Whatever, new SelectList(...))
......等等。
MVC的模型绑定将负责将数据读入模型,您只需确保将其传递回视图以再次显示相同的值。
答案 3 :(得分:0)
假设所选项目是帖子的一部分,控制器现在知道它是什么。只需在ViewData字典中有一个条目,指示应该选择哪个项目(获取时为null或者未选择任何内容)。在视图中,检查值,如果它不为空,请选择适当的选项。
答案 4 :(得分:0)
使用HttpRequestBase对象。 在视图中,这应该有效:
@Html.DropDownList("mydropdown", ViewBag.Itens as IEnumerable<SelectListItem>, new { value = Request["mydropdown"] })
答案 5 :(得分:0)
如果要在控制器操作方法中构建下拉列表数据源,您可以将选定的值发送给它
控制器:
public ActionResult Index( int serviceid=0)
{
// build the drop down list data source
List<Service> services = db.Service.ToList();
services.Insert(0, new Service() { ServiceID = 0, ServiceName = "All" });
// serviceid is the selected value you want to maintain
ViewBag.ServicesList = new SelectList(services, "ServiceID", "ServiceName",serviceid);
if (serviceid == 0)
{
//do something
}
else
{
// do another thing
}
return View();
}
查看:
//ServiceList is coming from ViewBag
@Html.DropDownList("ServicesList", null, htmlAttributes: new { @class = "form-control" })