我已經做了一個額外的參數標籤擴展,但是當我使用ViewData.ModelMetadata.DisplayName我沒有從我的模型上的Diaplsy屬性顯示名稱?從模型元數據解析元數據顯示名稱?
我的模型有這樣
[Display(Name = "User name")]
public string UserName { get; set; }
一個用戶名,並使用類似這樣的
@Html.LabelFor(m => m.SetupModel.UserName, @<span>No fancy characters mmkay?</span>)
與此HTML幫助
public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> ex, Func<object, HelperResult> template, string labelText = null) {
var htmlFieldName = ExpressionHelper.GetExpressionText(ex);
var metadata = htmlHelper.ViewData.ModelMetadata;
string resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
if (String.IsNullOrEmpty(resolvedLabelText)) {
return MvcHtmlString.Empty;
}
var tag = new TagBuilder("label");
tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
tag.InnerHtml = string.Format(
"{0} {1}",
resolvedLabelText,
template(null).ToHtmlString()
);
return MvcHtmlString.Create(tag.ToString());
}
但結果是UserNameNo看中字符mmkay?當我認爲它應該顯示在顯示屬性中設置的名稱?
我得到一個序列中沒有匹配的元素異常,因爲我在這個視圖中使用的模型是含有配置模型和RegisterModel型SetupViewModel的。建議的代碼查詢的屬性名稱爲「SetupModel.UserName」。 public class SetupViewModel public Configuration.Configuration Configuration {get;組; } public RegisterModel SetupModel {get;組; } } – Marcus
我更新了我的答案,只是爲了讓你走上正軌,它會在你的榜樣中起作用,但就是這樣。元數據是嵌套的,所以說... –
謝謝,這是做的伎倆。正如你所說,感覺好像有一個更好的方法來做到這一點,所以它也適用於任何財產。 – Marcus