HtmlExtensions ищет этот HtmlHelper<TModel> htmlHelper

Я попытался добавить htmlextensions в мой проект MVC. Когда я пытаюсь использовать их, они все ожидают этот параметр HtmlHelper htmlHelper? но по всем примерам это не предвидится.. что я делаю не так?

открытая статическая строка RadioButtonListFor(это HtmlHelper htmlHelper, Expression> expression, String tagBase), где TModel: class { return htmlHelper.RadioButtonListFor(expression, tagBase, null); }

    public static string RadioButtonListFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel>> expression, String tagBase, object htmlAttributes) where TModel : class
    {
        return htmlHelper.RadioButtonListFor(expression, tagBase, new RouteValueDictionary(htmlAttributes));
    }

    public static string RadioButtonListFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel>> expression, String tagBase, IDictionary<string, object> htmlAttributes) where TModel : class
    {
        var inputName = tagBase;
        RadioButtonListViewModel radioButtonList = GetValue(htmlHelper, expression);

        if (radioButtonList == null)
            return String.Empty;

        if (radioButtonList.ListItems == null)
            return String.Empty;


        var containerTag = new TagBuilder("td");
        containerTag.MergeAttribute("id", inputName + "_Container");
        foreach (var item in radioButtonList.ListItems)
        {
            var radioButtonTag = RadioButton(htmlHelper, inputName, new SelectListItem { Text = item.Text, Selected = item.Selected, Value = item.Value.ToString() }, htmlAttributes);

            containerTag.InnerHtml += radioButtonTag;
        }

        return containerTag.ToString();
    }

2 ответа

Вы пишете методы расширения для класса HtmlHelper. Когда вы захотите использовать свой метод расширения, вы должны импортировать пространство имен, в котором находится ваш метод расширения.

Скажи например RadioButtonListFor в MyNamespace

namespace MyNamespace
{
    public static class HtmlExtensions
    {
        public static string RadioButtonListFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel>> expression, String tagBase, object htmlAttributes) where TModel : class
        {
             return htmlHelper.RadioButtonListFor(expression, tagBase, new RouteValueDictionary(htmlAttributes));
        }
    }
}

Теперь, по вашему мнению, вы должны импортировать MyNamespace использовать этот метод расширения. Вы можете импортировать пространство имен в Razor, указав его в верхней части страницы.

@using MyNamespace

Я написал пост, в котором рассказывается о создании методов расширения для помощника HtmlHelper.DropDownList. Проверьте это... это может помочь. Я покрываю DropDownList а также DropDownListFor методы и перейти к включению ссылки на пространство имен для вашего класса метода расширения как в файле представления Razor, так и в web.config,

Заполните HTML-списки выбора из данных в модели представления в приложении ASP.NET MVC 3

Другие вопросы по тегам