ajb*_*ven 4 asp.net-mvc editorfor asp.net-mvc-2
有没有办法从视图中访问ViewModel属性上的任何属性(无论是数据注释属性,验证属性还是自定义属性)?我想在其属性具有[Required]属性的字段旁边添加一些必需指示符之一.
例如,如果我的ViewModel看起来像这样:
public class MyViewModel
{
[Required]
public int MyRequiredField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想在EditorFor模板中做一些事情,如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>
<div class="label-container">
<%: Html.Label("") %>
<% if (PROPERTY_HAS_REQUIRED_ATTRIBUTE) { %>
<span class="required">*</span>
<% } %>
</div>
<div class="field-container">
<%: Html.TextBox("") %>
<%: Html.ValidationMessage("") %>
</div>
Run Code Online (Sandbox Code Playgroud)
您正在寻找的信息是ViewData.ModelMetadata.Brad Wilson 关于模板的博客文章系列应该解释一切,尤其是关于ModelMetadata的帖子.
对于其他ValidationAttributes,您可以通过该ModelMetadata.GetValidators()方法访问它们.
ModelMetadata.IsRequired将告诉您a是否需要复杂类型(或包含的值类型Nullable<T>)RequiredAttribute,但它会为不可为空的值类型提供误报(因为它们是隐式需要的).您可以使用以下方法解决此问题:
bool isReallyRequired = metadata.IsRequired
&& (!metadata.ModelType.IsValueType || metadata.IsNullableValueType);
Run Code Online (Sandbox Code Playgroud)
注意:您需要使用!metadata.ModelType.IsValueType而不是 model.IsComplexType,因为ModelMetadata.IsComplexTypeMVC的返回false不认为是复杂类型,其中包括字符串.
| 归档时间: |
|
| 查看次数: |
2455 次 |
| 最近记录: |