我有两个插入用户的页面和这项工作正常但在我插入新信息后我发送新模型但这不起作用。我之前插入的信息仍然在文本框中没有任何错误。为什么???
返回视图(新用户());
@using (@Html.BeginForm("RegisterUser", "UserManagement", FormMethod.Post))
{
@Html.AntiForgeryToken()
<table class="Registertbl">
<tr>
<td>نام*</td>
<td> @Html.TextBoxFor(m => m.FName, new { maxlength = 20})<br />
</td>
<td>سمت*</td>
<td>@Html.TextBoxFor(m => m.Post, new { maxlength = 200})</td>
</tr>
</table>
<br />
<input type="submit" value="Insert" class="insertBtn" />
@Html.ActionLink("back", "ViewUserList", "UserManagement")
}
//控制器
[HttpGet]
public ActionResult RegisterUser()
{
return View(new User());
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RegisterUser(Common.UsersManagement.Entities.User model)
{
SetUserManagement();
var Result = userManagement.RegisterUser(model);
if (Result.Mode == Common.Extensions.ActionResultMode.Successfully)
{
return View(new User());
}
// if not Successfull
return View(model);
}
答案 0 :(得分:3)
尝试重定向回GET RegisterUser。
原因是:当您向MVC提交表单时,ModelState中的所有值(基本上是Request值)优先于您传递给视图的任何模型。重定向将为您提供一个空的ViewDataDictionary,因此所有值都将从您传递的模型中提取(新的User())
if (Result.Mode == Common.Extensions.ActionResultMode.Successfully)
{
return RedirectToAction("RegisterUser");
}
答案 1 :(得分:3)
maf748是正确的,你应该Post-Redirect-Get。您可以使用TempData与GET操作方法进行通信,以显示消息,例如
TempData.Message = "User registered.";
return RedirectToAction( "RegisterUser" );
然后在您的RegisterUser视图中,您可以检查TempData.Message是否有值。
但是,如果您仍然希望按照自己的方式进行操作,则可以在返回新视图之前尝试使用ModelState.Clear()。这将导致的问题是,如果用户在浏览器中刷新页面,它会将它们发送回您的Post方法,在浏览器中提示他们“你想重新提交你的数据”这个糟糕的消息,并可能在你的数据库。