使用MVC 4.5自定义Html帮助器,如何将元素的id自定义设置为模型的属性。
我创建了两个类:
public class ZClass1
{
public ZClass2 ZClass2 { get; set; }
}
public class ZClass2
{
public string Name { get; set; }
}
在我的View模型中
@model ZClass1
我创建了一个简单的自定义Html帮助器:
using System;
using System.Web.Mvc;
namespace j6.SalesOrder.Web.Models.Helpers
{
public static class SpanExtensions
{
public static MvcHtmlString Span(this HtmlHelper helper, string id, string text)
{
var tagBuilder = new TagBuilder("span");
tagBuilder.Attributes.Add("id", id);
return new MvcHtmlString(tagBuilder.ToString());
}
}
}
因此,在视图中使用了Html助手:
@using MyModelPath.Models.Helpers
@Html.Span("MyId","Just some text");
它呈现正确:
<span id="MyId">Just some text</span>
然而,我不想对id进行硬编码,而是希望利用模型,渲染输出将是:
<span id="ZClass2.Name">Just some text</span>
任何想法都会受到赞赏。
谢谢。
答案 0 :(得分:2)
有一种新的HtmlHelper.IdFor(...)方法,只需使用此方法......
public static MvcHtmlString Span<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string text)
{
var tagBuilder = new TagBuilder("span");
var id = helper.IdFor(expression);
tagBuilder.Attributes.Add("id", id.ToString());
return new MvcHtmlString(tagBuilder.ToString());
}
使用
@Html.Span(m => m.ZClass2.Name, "Just some text")
这不会呈现ZClass1.ZClass2,而是来自HtmlHelpers扩展方法的常用id呈现器。