Asp.net mvc 4 将图元属性设置为模型属性的自定义帮助程序

Asp.net mvc 4 将图元属性设置为模型属性的自定义帮助程序,asp.net-mvc-4,html-helper,view-helpers,razor-declarative-helpers,Asp.net Mvc 4,Html Helper,View Helpers,Razor Declarative Helpers,使用MVC4.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 S

使用MVC4.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>
只是一些文本
任何想法都将不胜感激

谢谢。

有一种新方法,就用这个吧

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());
}

这不会渲染ZClass1.ZClass2,而是来自HtmlHelpers扩展方法的常用id渲染器

谢谢你,工作得很好。其他人的其他信息。我添加了System.Web.Mvc.Html名称空间,helper.IdFor返回一个MvcHtmlString,我将其更改为tagBuilder.Attributes.Add(“id”,id.ToString())。非常感谢你!
@Html.Span(m => m.ZClass2.Name, "Just some text")