0

MVC 4.5 カスタム Html ヘルパーを使用して、カスタム要素の ID をモデルのプロパティに設定するにはどうすればよいですか。

2 つのクラスを作成しました。

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 に答える