我对MVC return View()
有一个奇怪的问题,我不确定是什么原因造成的,为什么我在整个项目中做了大量的return View("ViewName", model)
。返回视图的路由/页面呈现问题()
在进入页面时,对数据库进行调用,所有内容都被正确映射并传递给视图,如我所料。
public ActionResult ManageAccount()
{
var user = UserRepository.GetById(WebUserSecurity.CurrentUserId);
var model = Mapper.Map<Customer, ManageViewModel>(user);
return View("ManageAccount", model);
}
但是,如果出于某种原因,我需要返回到视图(如的ModelState是无效的),我传递回一个400 Bad Request
页面。我已经完成了流程的每个阶段,并且我知道我正在打开ManageAccount视图,但出于某种未知原因,这不是正在呈现的视图。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ManageAccount(ManageViewModel model)
{
if (ModelState.IsValid)
{
// DO SOME STUFF HERE
}
return View("ManageAccount", model);
}
@using (Html.BeginForm("ManageAccount", "Account", FormMethod.Post, null))
{
@Html.TextBoxFor(m => m.CustomerId)
@Html.AntiForgeryToken()
// RENDER SOME HTML HTML HERE
}
我猜这是一个路由问题,但我不知道如何去解决当前版本的代码中的问题。我的下一步行动就是使用JQuery验证和AJAX调用进行表单更新。然而,这是一个黑客攻击,我想了解为什么会发生这种情况,因为我将来可能会遇到这个问题,而且没有利用AJAX的奢侈品。
如果有人需要更多信息,请留下评论,我会更新问题。
而是返回查看(“ManageAccount”,model);尝试使用返回redirecttoaction(“ManageAccount”) – 2014-08-27 09:40:42
虽然我同意这种解决问题,但它不是一个完整的解决方案。代码中有些地方需要执行额外的ModelState检查,这些检查无法通过Data Annotations完成,因此执行RedirectToAction会删除需要传递给视图的所有错误消息。另外,它会销毁用户输入的所有数据,因为它会被新的数据库调用覆盖,进而会从网站中删除用户友好的元素。这两个原因是我使用'return View(“ViewName”,model)''的原因。 – Damian 2014-08-27 09:50:08
我可以给你一个完整的模型的解决方案,即模型值不会丢失........ – 2014-08-27 09:54:27