Я пытаюсь создать свой собственный вспомогательный метод HTML с этим синтаксисом:
@Html.BootstrapLabelFor(m => Model.Email) //Email is a simple string property.
Вот что у меня есть:
public static MvcHtmlString BootstrapLabelFor<TModel, TValue>
(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TValue>> expression)
{
string html = String.Format("<label for='{0}' class='some-class' />",
expression.Email.DisplayName???? - NEED HELP HERE. );
return new MvcHtmlString(html);
}
Так вот суть этого.
Что мне нужно знать, так это как извлечь свойство DisplayName (если оно так называется) из объекта выражения. Предполагая, что это то, где мне нужно искать.
Вот мой класс LogOnModel:
public class LogOnModel
{
[Required(ErrorMessage = "You must enter your email address.")]
[Display(Name = "Email:")]
public string Email { get; set; }
[Required(ErrorMessage = "You must enter your password.")]
[DataType(DataType.Password)]
[Display(Name = "Password:")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Теперь мы куда-то добираемся. Вот что у меня сейчас. Он выводит правильное свойство с тем, что я хочу, но не использует декоратор метаданных DisplayName, который я использовал в модели. Только выплевывая имя свойства. Есть предложения?
public static MvcHtmlString BootstrapLabelFor<TModel, TValue>
(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TValue>> expression)
{
string html = String.Format(
"<label for='{0}' class='control-label'>{0}</label>",
ExpressionHelper.GetExpressionText(expression));
return new MvcHtmlString(html);
}