自定义助手设置元素属性等于模型属性

时间:2013-08-26 07:58:35

标签: asp.net-mvc-4 html-helper view-helpers razor-declarative-helpers

使用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>

任何想法都会受到赞赏。

谢谢。

1 个答案:

答案 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呈现器。