ValidationSummary不会出现在部分视图中

时间:2012-01-24 12:15:50

标签: c# asp.net-mvc asp.net-mvc-3 partial-views modelstate

我有这个问题:

我转到如下页面:

/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(真)

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

3 个答案:

答案 0 :(得分:2)

InOrder在页面上获取验证消息,您需要使用Model返回视图,因为模型中包含Model State,如下所示:

return View(Model);

这将返回带有验证摘要的模型BidOnAuction

答案 1 :(得分:1)

这行代码

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 });
}

答案 2 :(得分:1)

您无法重定向到新操作,并希望模型状态存在。

如果modelState无效则返回(使用View(model)) 其他 重定向到详细信息。

如果您需要详细信息视图中的错误信息,您可以将其添加到TempData或作为可选参数传递。