0

使用 MVC 4.5 自定义 Html 帮助程序,如何将自定义元素的 id 设置为模型的属性。

我创建了两个类:

public class ZClass1
{
    public ZClass2 ZClass2 { get; set; }
}

public class ZClass2
{
    public string Name { get; set; }
}

在我的查看模型中

@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>

任何想法,将不胜感激。

谢谢你。

4

1 回答 1

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 渲染器。

于 2013-08-26T08:02:47.753 回答