属性如何在MVC2中起作用

时间:2010-09-24 11:03:33

标签: asp.net-mvc

我正在尝试确定属性在模型属性上使用时的确切角色。

例如,如果我在其中一个属性上设置了显示名称属性的Customer模型,那么无论出于何种原因,我都可以访问显示模板中的显示名称属性值。

public class Customer {

        [DisplayName("Customer Name")]
        public string Name { get; set; }
    }

/Shared/DisplayTemplates/String.ascx< ---使用此

<p><%=Model %> | <%=ViewData.ModelMetadata.DisplayName %></p>

-

但是,如果我将DisplayName属性更改为DataType,则MVC会查找名为ImageUrl的模板。

public class Customer {
        [DataType(DataType.ImageUrl)]
        public string Name { get; set; }
    }

/Shared/DisplayTemplates/ImageUrl.ascx< ---使用此

<img href="<%=Model %>" /> | <%=ViewData.ModelMetadata.DisplayName %>

为什么要忽略String模板?我认为MVC将属性的数据类型与模板名称匹配(如第一个示例),并且属性在模板中用作元数据。

这一切都非常令人困惑!

1 个答案:

答案 0 :(得分:1)

MVC在查找模板时匹配属性的数据类型 - 如第一个示例所示。

在第二个示例中,您的[DataType]属性已覆盖字符串定义,因此它现在查找名称与数据类型相同的模板。

如果要指定属性将使用哪个模板,可以使用UIHint属性

public class Customer {
        [UIHint("string")]
        [DataType(DataType.ImageUrl)]
        public string Name { get; set; }
    }