ValidationSummary未与部分视图一起出现
本文关键字:一起 视图 ValidationSummary | 更新日期: 2023-09-27 18:21:10
我有这个问题:
我转到一个页面,例如:
/Auction/Details/37
这就称之为动作方法:
public ActionResult Details(int id)
这种方法中的一条特殊线路是:
return View("DetailsLub", auction);
此视图包含以下行:
@Html.Action("BidOnAuction", new { auctionId = Model.Id })
它称这种行动方法:
public PartialViewResult BidOnAuction(int auctionId)
到目前为止还不错吗?
现在,我在BidOnAuction视图中有一个表单,它有一个按钮。当我点击此按钮时,此操作方法被锁定:
[HttpPost]
public ActionResult BidOnAuction(BidOnAuctionViewModel model)
这个操作方法有一个包含以下行的catch语句:
ModelState.AddModelError(string.Empty, operation + @" Failure: " + message);
return RedirectToAction("Details", new { id = model.AuctionId });
现在,DetailsLUB视图和BidOnAction视图都包含以下行:
@Html.ValidationSummary(true)
但是,问题是任何东西都不会被打印到屏幕上。我做错了什么?
InOrder要在页面上获得验证消息,您需要返回带有Model的视图,因为Model中有Model State,类似于以下内容:
return View(Model);
这将返回带有验证摘要的型号BidOnAuction
。
这行代码
return RedirectToAction("Details", new { id = model.AuctionId });
返回RedirectResult类的实例。这通常用于重定向,不渲染视图。如果要使用@Html.Action
将子操作呈现到父视图中,则需要从该子操作返回视图,而不是RedirectResult。即使没有子操作,RedirectResult也不会起作用。返回RedirectResult会导致浏览器向该操作发出全新的请求。模型状态无论如何都会丢失。你应该做一些类似的事情
try
{
//some actions
return RedirectResult("Details", new { id = model.AuctionId });
}
catch
{
ModelState.AddModelError(string.Empty, operation + @" Failure: " + message);
return View("Details", new { id = model.AuctionId });
}
您不能重定向到一个新的操作并期望模型状态在那里。
如果modelState无效,则返回(带View(model))其他的重定向到详细信息。
如果您需要详细信息视图中的错误信息,则必须将其添加到TempData或将其作为可选参数传入。