C# 在为模板构建MVC3编辑器时,是否有一种访问数据注释的方法?

C# 在为模板构建MVC3编辑器时,是否有一种访问数据注释的方法?,c#,asp.net-mvc-3,templates,data-annotations,editorfor,C#,Asp.net Mvc 3,Templates,Data Annotations,Editorfor,假设我有一个视图模型,其属性如下所示: [Required] [Display(Name = "Your name")] public string Name { get; set; } <label> @Model.DisplayName @if (Model.Required) { <span class="required">*</span> } <label> @Html.TextBoxFo

假设我有一个视图模型,其属性如下所示:

[Required]
[Display(Name = "Your name")]
public string Name { get; set; }
<label>
    @Model.DisplayName
    @if (Model.Required)
    {
        <span class="required">*</span>
    }
<label>
@Html.TextBoxFor(model => model)
我想构建一个EditorFor模板,其外观如下:

[Required]
[Display(Name = "Your name")]
public string Name { get; set; }
<label>
    @Model.DisplayName
    @if (Model.Required)
    {
        <span class="required">*</span>
    }
<label>
@Html.TextBoxFor(model => model)

@Model.DisplayName
@如果需要(型号为必选)
{
*
}
@TextBoxFor(model=>model)
显然,上述操作将失败(
Model.Required
Model.DisplayName
),但我只是将其作为我尝试执行的示例

这可能吗


提前感谢。

模型元数据可从
ViewData
获得,即


ViewData.ModelMetadata.GetDisplayName()

这个解决方案对我来说非常有效,它创建了一个帮助器方法来确定[Required]属性是否存在:

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("");
}
public static MvcHtmlString RequiredSymbolFor(
这个HtmlHelper HtmlHelper,
表情表情,
字符串符号=“*”,
字符串cssClass=“编辑器字段必填”)
{
ModelMetadata ModelMetadata=ModelMetadata.FromLambdaExpression(表达式,htmlHelper.ViewData);
if(modelMetadata.IsRequired)
{
var builder=新标记生成器(“span”);
建造商。添加cssClass(cssClass);
builder.InnerHtml=符号;
返回新的MvcHtmlString(builder.ToString(TagRenderMode.Normal));
}
返回新的MvcHtmlString(“”);
}