如何为Html.Label创建一个ASP.Net MVC Helper,它接受属性?
目前,当我定义一个Html.TextBox时,我能够传入一个属性列表.有点像下面这样:
new {disabled="disabled", @class="pcTextBoxWithoutPaddingDisabled"})%>
Run Code Online (Sandbox Code Playgroud)
但是,它看起来并不像Html.Label具有此功能.因此,我必须使用label标签定义我的标签.有点像下面这样:
<label class="pcLabelBlackWithoutPadding">
Run Code Online (Sandbox Code Playgroud)
我希望能够保持我的Html元素的创建方式.
那么,我如何创建一个Html.Label,它将包含一个属性列表?
谢谢你的帮助.
小智 9
这是MVC3的更新版本:
public static MvcHtmlString Label(this HtmlHelper helper, String htmlFieldName, String labelText, Object htmlAttributes)
{
ModelMetadata metadata = ModelMetadata.FromStringExpression(htmlFieldName, helper.ViewData);
String innerText = labelText ?? (metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split('.').Last()));
if (String.IsNullOrEmpty(innerText))
{
return MvcHtmlString.Empty;
}
TagBuilder tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
tagBuilder.SetInnerText(innerText);
return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}
Run Code Online (Sandbox Code Playgroud)
我用 lambda 表达式稍微修改了 Alexandr 代码,以防有人需要 lambda 表达式。
用法:
@Html.LabelFor(model => model.Property , new { @class = "bigFont" })
Run Code Online (Sandbox Code Playgroud)
代码:
public static MvcHtmlString LabelFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, Object htmlAttributes)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var innerText = metadata.DisplayName ?? metadata.PropertyName;
if (String.IsNullOrEmpty(innerText))
{
return MvcHtmlString.Empty;
}
var tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(metadata.PropertyName)));
tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
tagBuilder.SetInnerText(innerText);
return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7151 次 |
| 最近记录: |