我正在尝试确定属性在模型属性上使用时的确切角色。
例如,如果我在其中一个属性上设置了显示名称属性的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将属性的数据类型与模板名称匹配(如第一个示例),并且属性在模板中用作元数据。
这一切都非常令人困惑!
答案 0 :(得分:1)
MVC在查找模板时匹配属性的数据类型 - 如第一个示例所示。
在第二个示例中,您的[DataType]
属性已覆盖字符串定义,因此它现在查找名称与数据类型相同的模板。
如果要指定属性将使用哪个模板,可以使用UIHint属性
public class Customer {
[UIHint("string")]
[DataType(DataType.ImageUrl)]
public string Name { get; set; }
}