这可能是一个愚蠢的问题,但我无法找到我想要的东西。
是否有任何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库。
答案 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));
}