自定义强类型HTml帮助程序不返回属性值

时间:2015-02-06 11:38:55

标签: c# asp.net asp.net-mvc asp.net-mvc-4 html-helper

我正在尝试学习如何制作强类型的Html助手。我尝试了几个网站,我发现代码项目的网站Custom Strongly-typed HtmlHelpers in ASP.NET MVC和代码网站的颂歌Why All The Lambdas?非常有用。

我几乎从代码项目中复制粘贴代码并稍微改变了一下。我尝试制作一个自定义的html助手,它将遵循Bootstrap样式:BootstrapTextBoxFor() - 下面的代码。它应该呈现带有标签的文本框。由于某些原因,Metadata.Model为空,我无法获取属性名称。我的意思是我希望获得[Display]属性中指定的值。例如

[Display("User Name")]
public string username { get; set; }


代码

public static MvcHtmlString BootstrapTextBox(this HtmlHelper htmlHelper, string name, string value, string type = "text", int labelCol = 2, int editorCol = 6)
{
    StringBuilder tags = new StringBuilder(); //.Append(Environment.NewLine);
    tags.AppendLine(@"<div class=""form-group"">");
    tags.AppendFormat(@"<label class=""col-md-{0}"" for=""{1}"">{2}</label>", labelCol, name, value).Append(Environment.NewLine);
    tags.AppendFormat(@"<div class=""col-md-{0}"">", editorCol).Append(Environment.NewLine);
    tags.AppendLine(@"<div class=""input-group"">");
    tags.AppendFormat(@"<input type=""{0}"" class=""form-control"" id=""{1}"" />", type, name);
    tags.AppendLine(@"</div>");
    tags.AppendLine(@"</div>");
    tags.AppendLine(@"</div>");

    return MvcHtmlString.Create(tags.ToString());
}

public static MvcHtmlString BootstrapTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
    string name = ExpressionHelper.GetExpressionText(expression);
    var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    return BootstrapTextBox(htmlHelper, name, metadata.Model as string);
}

0 个答案:

没有答案