【问题标题】:ValidationSummary not appearing with Partial ViewsValidationSummary 不与部分视图一起出现
【发布时间】:2012-01-24 12:15:50
【问题描述】:

我有这个问题:

我转到一个页面,例如:

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

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

【问题讨论】:

  • 您是否仅按照公认的 awswer 解决了这个问题?我在使用局部视图时遇到了类似的问题...如果我使用局部视图,则不会显示验证摘要,但如果我不使用它,则会按预期显示验证摘要。我的代码中已经有了公认的答案...

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


【解决方案1】:

为了在页面上获取验证消息,您需要返回带有模型的视图,因为模型中包含模型状态,如下所示:

return View(Model);

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

【讨论】:

    【解决方案2】:

    这行代码

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

    【讨论】:

    • 我已经尝试过了,虽然它必须有点不同,因为没有详细信息视图。我有返回视图(“DetailsEsf”,拍卖)。问题是这会导致无限循环。 [HttpPost] public ActionResult BidOnAuction(BidOnAuctionViewModel model) 动作不断被调用。
    • 有什么方法可以给你。此文本区域空间不足。
    • @archil 我也有类似的问题...你能检查一下这个问题吗:stackoverflow.com/questions/17860803/…
    【解决方案3】:

    您不能重定向到新操作并期望模型状态在那里。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-15
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多