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(“”);
}