用于HTML控件的MVC助手库

时间:2011-08-07 12:00:31

标签: asp.net-mvc-3 libraries helper

这可能是一个愚蠢的问题,但我无法找到我想要的东西。

是否有任何MVC助手库,特别是表单类型控件。

例如,我想为Label实现HTML,如:

<label class="form-label-left required" for="message">Message: <span>*</span></label>

不幸的是,内置助手不允许您在标签上指定任何内容。 (据我所知)

其他示例可以指定输入类型:

<input type="email" name="EmailAddress" />

其他类型,例如来自HTML5的&#39; tel&#39;,&#39;范围&#39;,&#39;数字&#39;等。

那么是否有任何库可以让你更好地控制这类事情,或者只是编写自己的帮助者会更好?

更新

我在The Morning Brew的RSS Feed中找到了这个。

http://www.codeproject.com/KB/webforms/Html5MVCWebControls.aspx

用于HTML5控件的库。似乎还缺少适用于MVC的Customizable或HTML5库。

1 个答案:

答案 0 :(得分:0)

您可以浏览ASP.NET MVC源代码并提出自定义帮助程序。以下是带有必需指标的标签示例。

public MvcHtmlString CustomLabelFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
    var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
    string htmlFieldName = ExpressionHelper.GetExpressionText(expression);

    string resolvedLabelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
    if (String.IsNullOrEmpty(resolvedLabelText))
    {
        return MvcHtmlString.Empty;
    }

    if (metadata.IsRequired)
    {
        var spanTag = new TagBuilder("span");
        spanTag.AddCssClass("required-star");
        spanTag.InnerHtml = "*";

        resolvedLabelText = string.Concat(resolvedLabelText, spanTag.ToString(TagRenderMode.Normal));
    }

    var tag = new TagBuilder("label");
    tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
    tag.InnerHtml = resolvedLabelText;
    tag.AddCssClass("text_label");

    return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}