【问题标题】:ASP.NET MVC - Missing Error Messages using Partial View with TemplateInfoASP.NET MVC - 使用带有 TemplateInfo 的部分视图缺少错误消息
【发布时间】:2012-02-06 23:56:27
【问题描述】:

我有一个这样的 ASP.NET ViewModel:

public class ParentViewModel
{
    public ChildViewModel Child { get; set; }
}

ChildViewModel 类又具有用Required 属性和适当的错误消息修饰的属性。像这样设置 ViewModel 的原因是因为 ChildViewModel 绑定到局部视图,并且局部视图在不同的上下文中呈现。在一种情况下,我正在渲染 ChildViewModel 的部分视图:

@Html.Partial("~/Views/Shared/_ChildView.cshtml", Model.AddressModel, new ViewDataDictionary
   {
       TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Child" },                   
   })

TemplateInfo 使分部视图的 HTML 输入以正确的名称呈现,因此它们在回发时正确地重新填充到 ParentViewModel。 ASP.Net 也正确检测何时子视图模型缺少信息(ModelState.IsValid 返回正确的结果)。但是,问题是它不显示验证错误消息。有关如何显示错误消息的任何想法?

【问题讨论】:

  • 好吧,如果您包含 _ChildView.cshtml 代码可能会有所帮助

标签: asp.net asp.net-mvc


【解决方案1】:

为什么不使用编辑器模板?我的意思是以下看起来很可怕:

@Html.Partial("~/Views/Shared/_ChildView.cshtml", Model.AddressModel, new ViewDataDictionary
{
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Child" },                   
})

它不仅看起来很可怕,而且可能会出现一些副作用,正如您已经发现的那样。

怎么样:

@Html.EditorFor(x => x.Child)

更清洁,不是吗?现在您所要做的就是将~/Views/Shared/_ChildView.cshtml 移动到~/Views/Shared/EditorTemplates/ChildViewModel.cshtml

@model ChildViewModel
...

【讨论】:

    【解决方案2】:

    这完全是错误的做法。您应该使用模板而不是部分视图。

    如果您创建一个 Child.cshtml 并将其放入 DisplayTemplates(或 EditorTemplates,如果它是一个编辑器)然后,在您的代码中您可以简单地执行以下操作:

    @Html.DisplayFor(m => m.Child)
    

    【讨论】:

    • 谢谢,不知道 EditorTemplates。
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2017-03-08
    • 2016-10-15
    相关资源
    最近更新 更多