控制器:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string list1)
{
return View();
}
}
查看(使用默认布局):
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
@Html.DropDownList("list1",
new SelectList(new[] { "Item 1", "Item 2", "Item 3" }))
<input type="submit"/>
}
<br />
<br />
在DropDownList中选择值并提交表单后,我的应用程序具有与之前相同的状态。例如,如果我在按“提交”后选择了“项目3”,则我选择了“项目3”。它是如何工作的?
UPD:
我不想避免它,只是想了解它的工作原理。
答案 0 :(得分:2)
在[Post]
处理程序中,您不会在任何地方重定向并直接返回视图。因此,值仍然存在,因为它们仍然在模型状态中找到。
成功[Get]
后,常见模式是redirect到Post
处理程序,在这种情况下,值不会持续存在。
答案 1 :(得分:0)
来自MVC来源:
<强> SelectExtensions.cs: 强>
.....
object defaultValue = (allowMultiple) ? htmlHelper.GetModelStateValue(fullName, typeof(string[])) : htmlHelper.GetModelStateValue(fullName, typeof(string));
.....
<强> HtmlHelper.cs: 强>
internal object GetModelStateValue(string key, Type destinationType)
{
ModelState modelState;
if (ViewData.ModelState.TryGetValue(key, out modelState))
{
if (modelState.Value != null)
{
return modelState.Value.ConvertTo(destinationType, null /* culture */);
}
}
return null;
}
嗯,这意味着Action发送“ModelState”来查看和控制(我知道它的定义不正确)使用“ModelState”来填充它们自己。