2011-08-04 49 views
2

假设我有一个属性视图模型看起来是这样的:当构建MVC3 EditorFor模板时,有没有办法访问DataAnnotations?

[Required] 
[Display(Name = "Your name")] 
public string Name { get; set; } 

我想建立一个EditorFor模板,看起来是这样的:

<label> 
    @Model.DisplayName 
    @if (Model.Required) 
    { 
     <span class="required">*</span> 
    } 
<label> 
@Html.TextBoxFor(model => model) 

显然,上述将失败(Model.RequiredModel.DisplayName),但我只是用它作为我想要做的一个例子。

这可能吗?

在此先感谢。

回答

3

型号元数据可从ViewData获得,即。

ViewData.ModelMetadata.GetDisplayName()

+0

这样做,谢谢。 –

3

该解决方案的工作很适合我通过创建一个辅助方法制定出如果[必需]属性存在与否:

public static MvcHtmlString RequiredSymbolFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TProperty>> expression, 
    string symbol = "*", 
    string cssClass = "editor-field-required") 
{ 
    ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 

    if (modelMetadata.IsRequired) 
    { 
     var builder = new TagBuilder("span"); 
     builder.AddCssClass(cssClass); 
     builder.InnerHtml = symbol; 

     return new MvcHtmlString(builder.ToString(TagRenderMode.Normal)); 
    } 

    return new MvcHtmlString(""); 
} 

http://www.kristofclaes.be/blog/2011/08/26/an-htmlhelper-to-display-if-a-field-is-required-or-not-in-aspnet-mvc-3/

https://web.archive.org/web/20130711024856/http://www.kristofclaes.be/blog/2011/08/26/an-htmlhelper-to-display-if-a-field-is-required-or-not-in-aspnet-mvc-3/

相关问题