2014-11-17 5 views
0

Я кодирование приложения в MVC 5 интернете, и я хочу, чтобы отобразить Id в виде div при использовании метода DisplayFor в view.Использование HtmlHelper в MVC 5

Вот код, который у меня есть:

public static MvcHtmlString DisplayWithIdFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string wrapperTag = "div") 
{ 
    var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); 
    return MvcHtmlString.Create(string.Format("<{0} id=\"{1}\">{2}</{0}>", wrapperTag, id, helper.DisplayFor(expression))); 
} 

Это ошибка, что я получаю:

«System.Web.Mvc.HtmlHelper» не содержит определения для «DisplayFor» и никакой метод расширения «DisplayFor», принимающий первый аргумент типа «System.Web.Mvc.HtmlHelper», можно найти (вам не хватает директивы использования или ссылки на сборку?)

Я не уверен, что положил метод DisplayWithIdFor в нужное место. Я желаю использовать метод DisplayWithIdFor в Editviewcontroller по имени AssetController и поместили метод DisplayWithIdFor в AssetController.

Могу ли я, пожалуйста, помочь с этим кодом?

Заранее спасибо.

ответ

0

Ваш метод должен быть чем-то вроде

using System; 
using System.Linq.Expressions; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 

namespace YourAssembly.Html 
{ 
    public static class DisplayHelper 
    { 
    public static MvcHtmlString DisplayWithIdFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string wrapperTag = "div") 
    { 
     var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); 
     MvcHtmlString text = DisplayExtensions.DisplayFor(helper, expression); 
     Tagbuilder html = new TagBuilder(wrapperTag); 
     html.MergeAttribute("id", id); 
     html.InnerText = text; 
     return MvcHtmlString.Create(html.ToString()); 
    } 
    } 
} 
+0

Я сделал, как вы предложили, однако DisplayWithIdFor не может быть найден при использовании @Html. синтаксис. – user3736648

+0

Вы указали ссылку на нее в своем представлении? '@using YourAssembly.Html;'? Или, если вы хотите использовать его и в других представлениях, добавьте его в 'web.config'. –

+0

Обратите внимание, что это можно немного упростить, удалив строку 'var id = ...' и заменив 'html.MergeAttribute (« id », id)' на 'html.GenerateId (ExpressionHelper.GetExpressionText (выражение));' –

Смежные вопросы