Можно ли использовать объект HtmlHelper в пользовательском помощнике? - PullRequest
1 голос
/ 07 сентября 2010

Кто-нибудь сможет посоветовать, возможно ли повторно использовать существующий HtmlHelper в новом настраиваемом помощнике по Html.Например:

public static class GridHelper
{
    public static string RenderGrid(this HtmlHelper helper, Object routeParams)
    {          
        return HtmlHelper.BeginForm(routeParams);
    }
}

Выше приведен простой пример, но по сути я хотел бы сгруппировать логику и форматирование для группы помощников html, отображающих представление.Этот вид будет использоваться в нескольких местах, поэтому я хотел бы повторно использовать код.Однако во всех моих текущих попытках я не смог получить доступ к таким методам, как «CheckBox» или «BeginForm».Возможно, я неправильно использую объект HtmlHelper?

Кто-нибудь знает, можно ли это сделать?

Спасибо, Мэтт

Ответы [ 2 ]

3 голосов
/ 07 сентября 2010

В вашем примере, я думаю, вам нужно сделать:

public static class GridHelper 
{ 
    public static string RenderGrid(this HtmlHelper helper, Object routeParams) 
    {           
        return helper.BeginForm(routeParams); 
    } 
} 
1 голос
/ 07 сентября 2010

Вы добавили следующее, используя?

using System.Web.Mvc.Html;

Вы также можете использовать универсальные помощники:

public static string RenderGrid<TModel, TProperty>(this HtmlHelper helper<TModel>, Expression<Func<TModel, TProperty>> displayExpression, Object routeParams)

Но вам не нужно вызывать статический класс, вы можете напрямую использовать помощник:

public static class GridHelper
{
    public static string RenderGrid(this HtmlHelper helper, Object routeParams)
    {          
        return helper.CheckBox("foo");
    }
}

public static string RenderGrid<TModel, TProperty>(this HtmlHelper helper<TModel>, Expression<Func<TModel, TProperty>> expr, Object routeParams)
{
    public static string RenderGrid(this HtmlHelper helper, Object routeParams)
    {          
        return helper.CheckBoxFor( expr );
    }
}
...