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)

但是,问题是任何东西都不会被打印到屏幕上。我做错了什么?

ValidationSummary未与部分视图一起出现

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或将其作为可选参数传入。