【问题标题】:MVC Helpers Library for HTML ControlsHTML 控件的 MVC 助手库
【发布时间】:2011-08-18 15:13:26
【问题描述】:

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

是否有任何 MVC 帮助程序库,专门用于表单类型控件。

例如,我想为这样的标签实现HTML:

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

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

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

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

以及来自 HTML5 的其他类型,例如 'tel'、'range'、'number' 等。

那么是否有任何库可以让您更好地控制这类事情,还是只编写我自己的助手更好?

更新:

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

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

HTML5 控件库。似乎仍然缺少用于 MVC 的可定制或 HTML5 库。

【问题讨论】:

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


    【解决方案1】:

    您可以浏览 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));
    }
    

    【讨论】:

    • 干杯,我实际上写了类似的东西,但我没有想到使用元数据来确定是否需要。这很酷。我想知道是否值得为所有这些东西创建我自己的库,或者是否有任何库已经做了很多这些东西,所以我不创建一种新型轮子。
    • @Phill 有很多第三方库。例如MVC ContribTelerik。我倾向于为一些简单的任务编写自己的代码。
    • 我昨天看 MVC Contrib 时无法弄清楚它是什么,看起来它想要做所有事情,我找不到任何说“这里有一堆可用的助手”的东西'。 Telerik 我根本不会碰,他们的 Web 表单控件很糟糕。
    • @Phill 是的。 MVCContrib 文档和示例还不够。但是博客中有示例和操作方法。
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多