0

使用MVC 4.5自定義Html幫助程序,如何將自定義元素的ID設置爲模型的屬性。自定義幫助程序將元素屬性設置爲模型屬性

我已經創建了兩個類:

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

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

在我查看我創建了一個簡單的自定義HTML輔助模型

@model ZClass1 

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> 

任何想法,將不勝感激。

謝謝。

回答

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

+0

謝謝,效果很好。其他信息。我添加了System.Web.Mvc.Html命名空間,而helper.IdFor返回一個MvcHtmlString,我將其更改爲tagBuilder.Attributes.Add(「id」,id.ToString())。非常感謝你! – deDogs