asp.net-mvc-3 – 在html标签中添加html输入

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – 在html标签中添加html输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我使用了 Twitter Bootstrap,我的大部分表单看起来都很棒
  1. <div class="control-group">
  2. @Html.LabelFor(m => m.Prop)
  3. <div class="controls">
  4. @Html.EditorFor(m => m.Prop)
  5. </div>
  6. @Html.ValidationMessageFor(model => model.Prop)
  7. </div>

唯一的问题是无线电按钮和复选框. Twitter Bootstrap调用HTML5样式标签,其中包含无线电或复选框输入内部的标签标签

  1. <label class="checkBox">
  2. <input type="checkBox"> Check me out
  3. </label>

如果我不能用@Html创建这些,或者重载,我至少可以使用Labelfor创建的文本?

  1. <label class="checkBox">
  2. @Html.EditorFor(m=> m.Prop)
  3. @Html.TheVariableThatContainsTheTextThatLabelForUsesFor(m => m.Prop)
  4. </label>

解决方法

为什么你不能用@Html创建这些.如果你编写自己的扩展方法(见下文),应该这样做吗?
  1. public static class HtmlHelperExtensions
  2. {
  3. public static MvcHtmlString MyCheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,bool>> expression,object htmlLabelAttributes = null,object htmlCheckBoxAttributes = null)
  4. {
  5. var checkBox = htmlHelper.CheckBoxFor(expression,htmlCheckBoxAttributes);
  6.  
  7. var labelTag = new TagBuilder("label");
  8. labelTag.AddCssClass("checkBox");
  9. labelTag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlLabelAttributes));
  10. labelTag.InnerHtml = checkBox.ToString();
  11.  
  12. return new MvcHtmlString(labelTag.ToString());
  13. }
  14. }

编辑:

这个修订版本怎么样这正是标签所做的.

  1. public static class HtmlHelperExtensions
  2. {
  3. public static MvcHtmlString MyCheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper,object htmlCheckBoxAttributes = null)
  4. {
  5. var checkBox = htmlHelper.CheckBoxFor(expression,htmlCheckBoxAttributes);
  6.  
  7. var labelTag = new TagBuilder("label");
  8. var checkBoxName = ExpressionHelper.GetExpressionText(expression);
  9. labelTag.AddCssClass("checkBox");
  10. labelTag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlLabelAttributes));
  11. labelTag.InnerHtml = checkBox.ToString() + LabelHelper(ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData),checkBoxName);
  12.  
  13. return new MvcHtmlString(labelTag.ToString());
  14. }
  15.  
  16. private static MvcHtmlString LabelHelper(ModelMetadata Metadata,string fieldName)
  17. {
  18. string labelText;
  19. var displayName = Metadata.DisplayName;
  20.  
  21. if (displayName == null)
  22. {
  23. var propertyName = Metadata.PropertyName;
  24.  
  25. labelText = propertyName ?? fieldName.Split(new[] { '.' }).Last();
  26. }
  27. else
  28. {
  29. labelText = displayName;
  30. }
  31.  
  32. if (string.IsNullOrEmpty(labelText))
  33. {
  34. return MvcHtmlString.Empty;
  35. }
  36.  
  37. return new MvcHtmlString(labelText);
  38. }
  39. }

我应该注意,使用MVC 4有一个DisplayNameFor Helper,所以整个标签业务可以简化一下.

猜你在找的asp.Net相关文章