我有一个提交公式(Html.BeginForm())的视图,并希望在控制器中设置一些模型属性 ,返回视图,希望在视图中看到这个属性图。
这是我在标准MVC 3登录公式上的模式。
精确度:我真的想在POST处理中设置这些属性,而不是在GET中。
请您解释为什么我在控制器中设置的属性永远不会显示在视图上?
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
model.RememberMe = true;
model.UserName = "foobar";
return View(model);
}
使用标准的LogOn.cshtml视图:
@using (Html.BeginForm()) {
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
<p>
<input type="submit" value="Log On" />
</p>
</fieldset>
</div>
}
答案 0 :(得分:4)
如果您想在HttpPost Action中使用,则必须执行以下操作。
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
ModelState.Remove("RememberMe");
ModelState.Remove("UserName");
model.RememberMe = true;
model.UserName = "foobar";
return View(model);
}
答案 1 :(得分:1)
据我了解你的问题:将此动作添加到你的控制器
/*no http post*/
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
model = model ?? new LogOnModel();
model.RememberMe = true;
model.UserName = "foobar";
return View(model);
}
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
ModelState.Clear();
model.RememberMe = true;
model.UserName = "foobar";
return View(model);
}
答案 2 :(得分:0)
我认为你在混淆[HttpPost]
旗帜正在做什么。此属性将操作标识为将请求作为POST发送到服务器时要使用的操作。当您第一次查看页面时,浏览器的标准请求是GET。您的POST操作应该是检查提交的表单凭据的操作。
[HttpGet]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
model.RememberMe = true;
model.UserName = "foobar";
return View(model);
}
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
//Verify input here
}