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