0

Использование пользовательского помощника Html MVC 4.5, как я могу настроить пользовательский идентификатор элемента в свойстве модели.Атрибуты атрибутов пользовательских помощников, равные свойству модели

Я создал два класса:

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> 

Однако вместо жесткого кодирования идентификатор, я хотел бы воспользоваться помощью модели, которая была бы оказана выход:

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

+0

Спасибо, отлично работал. Дополнительная информация для других. Я добавил пространство имен System.Web.Mvc.Html и helper.IdFor возвращает MvcHtmlString, который я изменил на tagBuilder.Attributes.Add («id», id.ToString()). Большое спасибо! – deDogs