【问题标题】:ASP.NET MVC Displaying errors through ModelState.AddModelError in partial viewASP.NET MVC 在局部视图中通过 ModelState.AddModelError 显示错误
【发布时间】:2014-07-11 13:41:54
【问题描述】:

在使用 MVC 4 的出租车预订系统中,我使用 Home->Index 中的局部视图来显示 Quick Book 部分。在布局中,我使用以下代码来渲染局部视图:

    @{Html.RenderAction("CategoryMenu", "Search");} 

SearchController 的 CategoryMenu 动作是:

   [ChildActionOnly]
    public ActionResult CategoryMenu()
    {
        var searches = new QuickSearch();
        return PartialView(searches);
    }

快速搜索模型是:

public class QuickSearch
{
    public int CatId { get; set; }

    [DisplayName("Pickup date")]
    [Required(ErrorMessage = "Pickup Date is  required.")]       
    public string PickupDate { get; set; }

    [DisplayName("Cab Type")]
    [Required(ErrorMessage = "Category  is  required.")]
    public int CabCategory{ get; set; }


    public static IEnumerable<Category> Categories = new List<Category> { 
new Category {
    CategoryId = 1,
    Name = "Economy"
},
new Category {
    CategoryId = 2,
    Name = "Midsize"
},
/*Other categories*/
};
}

最后在 CategoryMenu.cshtml 文件的部分视图中,我将 QuickSearch 模型发送到 SearchController 的 SearchByDate 操作。在 SearchByDate 操作中,我想确保取货日期不早于当前日期。我创建了一个 AppHelper.CheckDate() 方法来验证需求。 但是,我无法在主页索引中的部分视图中显示较早取件日期的错误消息。在 SearchByDate 操作中,我尝试了以下操作:

if (!AppHelper.CheckDate(model.PickupDate))
       {

           ModelState.AddModelError("", "Date cannot be before the current date.");
           return PartialView("CategoryMenu");

       }

但是,整个 CategoryMenu 视图将显示错误消息,而不是应显示在主索引的部分视图中的错误消息。任何帮助将不胜感激。

【问题讨论】:

  • 您将验证摘要放在哪里?父视图。?
  • CategoryMenu.cshtml 文件中的否为:@Html.ValidationSummary(true)
  • 你能发布你的CategoryMenu.cshtml吗?

标签: asp.net-mvc


【解决方案1】:

这是因为您只显示错误后的视图。你的代码是这样的 -

if (!AppHelper.CheckDate(model.PickupDate))
{
     ModelState.AddModelError("", "Date cannot be before the current date.");
     return PartialView("CategoryMenu");
}

将错误添加到ModelState 是可以的。但return 部分不是。您只是返回视图,这就是它显示视图的原因。

如果 (a) 你只想显示错误而不是视图,那么只返回错误 -

return Content("Date cannot be before the current date.")

(b) 如果您想显示带有错误的视图,请尝试将错误与视图一起正确地传递给 ModelsStaterender -

return PartialView("CategoryMenu", model);

(c) 如果您在父视图中显示错误并且不想从该局部视图呈现错误或任何内容,请尝试返回空结果 -

return new EmptyResult();

【讨论】:

  • 每当用户通过使用'return RedirectToAction("Index", "Home", model);'选择较早的日期时,我都可以显示带有部分视图的主页.这意味着用户不能在更早的日期预订出租车。但是,我无法显示错误消息。我在 SearchByDate 操作中尝试了“ModelState.AddModelError”和 ViewBag.ErrorMessage。在主索引和部分视图中,我尝试将错误消息显示为“@Html.ValidationSummary(true)”和“@ViewBag.ErrorMessage;”。
  • 您可能想尝试像这样传递视图数据以在局部视图中显示错误 - stackoverflow.com/questions/1169170/…
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多