验证 – 想知道为什么DisplayName属性在被覆盖属性的LabelFor中被忽略

今天我做了几个<%= Html.LabelFor(m => m.MyProperty)%>在ASP.NET MVC 2中,并使用System.ComponentModel中的[displayName(“Show this而不是MyProperty”)]属性

事实证明,当我将属性放在一个被覆盖的属性上时,LabelFor似乎没有注意到。
但是,[必需]属性在覆盖属性上正常工作,生成的errormessage实际上使用了displayNameAttribute。

这是一些简单的示例代码,更实际的情况是,我有一个与视图模型分离的数据库模型,但为方便起见,我想从数据库模型继承,添加仅查看属性并使用UI的属性来装饰viewmodel 。

public class POCOWithoutDataAnnotations
{
    public virtual string PleaSEOverrideMe { get; set; }        
} 
public class EditModel : POCOWithoutDataAnnotations
{
    [required]
    [displayName("This should be as label for please override me!")]
    public override string PleaSEOverrideMe 
    {
        get { return base.PleaSEOverrideMe; }
        set { base.PleaSEOverrideMe = value; }
    }

    [required]
    [displayName("This property exists only in EditModel")]
    public string NonOverriddenProp { get; set; }
}

强类型的ViewPage< EditModel>包含:

<div class="editor-label">
            <%= Html.LabelFor(model => model.PleaSEOverrideMe) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.PleaSEOverrideMe) %>
            <%= Html.ValidationMessageFor(model => model.PleaSEOverrideMe) %>
        </div>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.NonOverriddenProp) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.NonOverriddenProp) %>
            <%= Html.ValidationMessageFor(model => model.NonOverriddenProp) %>
        </div>

然后,标签显示为“PleaSEOverrideMe”(不使用displayNameAttribute),并且“查看页面时”仅使用EditModel“(使用displayNameAttribute)显示属性
如果我用空值发布,则触发此ActionMethod的验证:

[HttpPost]
    public ActionResult Edit(EditModel model)
    {
        if (!ModelState.IsValid)
            return View(model);
        return View("Thanks");
    }

<%= Html.ValidationMessageFor(model => model.PleaSEOverrideMe)%>实际使用[displayName(“这应该是标签,请重写我!”)]属性,并产生认的errortext“这应该是标签为了覆盖我!字段是必需的。

一些友好的灵魂会有一些光明吗?

解决方法

Model binding and metadata using the strongly-typed helpers looks at the declared,rather than the runtime,type of the model.我认为这是一个错误,但显然MVC团队不同意我的观点,因为我的Connect问题被关闭为“按设计”。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...