2

假设我有一个视图模型,其属性看起来像这样:

[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),但我只是用它作为我正在尝试做的一个例子。

这可能吗?

提前致谢。

4

2 回答 2

3

模型元数据可从ViewData,即。

ViewData.ModelMetadata.GetDisplayName()

于 2011-08-04T22:02:20.987 回答
3

通过创建一个帮助方法来确定 [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("");
}

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/

于 2011-09-18T12:30:34.583 回答