我正在使用 ViewData 将列表
// Controller:
ViewData["myList"] = new SelectList(new List<string>(new[] "AAA", "BBB", "CCC" }));
我使用此列表来填充列表框:
// View:
@Html.ListBox("myList")
在发布时,我检索所选项目,如下所示:
// Controller:
string myList = form["myList"]
到目前为止一切顺利,但选定的项目已在“发布”中全部清除。
如何使所选项目在请求中持续存在?
最佳答案
正如已经提到的,MVC 没有 ViewState 机制,因此您想要在 View 中呈现的值必须在每个请求时实例化。
这是一个相当粗略的示例,但应该概述您需要做什么:
public ActionResult Index()
{
ViewData["myList"] = GetSelectList();
return View();
}
[HttpPost]
public ActionResult Index(FormCollection form)
{
ViewData["myList"] = GetSelectList(form["myList"]);
return View();
}
private MultiSelectList GetSelectList(string selected = "")
{
var selectedValues = selected.Split(',');
return new MultiSelectList(new List<string>(new[] { "AAA", "BBB", "CCC" }), selectedValues);
}
查看标记
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm()) {
@Html.ListBox("myList")
<input type="submit" value="Submit" />
}
关于asp.net-mvc - 如何使控制值在请求之间保持不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167692/