簡體   English   中英

自定義助手設置元素屬性等於模型屬性

[英]Custom helpers setting element attributes equal to a model property

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

任何想法,將不勝感激。

謝謝。

有一個新的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呈現器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM