如何在 IHtmlHelper<dynamic> 上创建扩展方法
How to create an extension method on IHtmlHelper<dynamic>
This article 展示了如何在 HtmlHelper<dynamic>
上创建扩展方法,但它似乎不适用于 MVC6(我将 HtmlHelper 更改为 IHtmlHelper)。
错误是:
'IHtmlHelper<PagedList<Tag>>' does not contain a definition for 'CustomSelectList' and the best extension method overload 'HtmlHelperExtensions.CustomSelectList<Tag>(IHtmlHelper<dynamic>, string, IEnumerable<Tag>, Func<Tag, string>, Func<Tag, string>)' requires a receiver of type 'IHtmlHelper<dynamic>'
这在 MVC6 中是如何完成的?
扩展方法需要在 IHtmlHelper
而不是 HtmlHelper<dynamic>
。
public static HtmlString CustomSelectList<T>(
this IHtmlHelper html,
string selectId,
IEnumerable<T> list,
Func<T, string> getName,
Func<T, string> getValue)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat("<select id=\"{0}\">", selectId);
foreach (T item in list)
{
builder.AppendFormat("<option value=\"{0}\">{1}</option>",
getValue(item),
getName(item));
}
builder.Append("</select>");
return new HtmlString(builder.ToString());
}
用法:
@(Html.CustomSelectList<Tag>("myId", Model, t => t.Name, t => t.Id.ToString()))
This article 展示了如何在 HtmlHelper<dynamic>
上创建扩展方法,但它似乎不适用于 MVC6(我将 HtmlHelper 更改为 IHtmlHelper)。
错误是:
'IHtmlHelper<PagedList<Tag>>' does not contain a definition for 'CustomSelectList' and the best extension method overload 'HtmlHelperExtensions.CustomSelectList<Tag>(IHtmlHelper<dynamic>, string, IEnumerable<Tag>, Func<Tag, string>, Func<Tag, string>)' requires a receiver of type 'IHtmlHelper<dynamic>'
这在 MVC6 中是如何完成的?
扩展方法需要在 IHtmlHelper
而不是 HtmlHelper<dynamic>
。
public static HtmlString CustomSelectList<T>(
this IHtmlHelper html,
string selectId,
IEnumerable<T> list,
Func<T, string> getName,
Func<T, string> getValue)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat("<select id=\"{0}\">", selectId);
foreach (T item in list)
{
builder.AppendFormat("<option value=\"{0}\">{1}</option>",
getValue(item),
getName(item));
}
builder.Append("</select>");
return new HtmlString(builder.ToString());
}
用法:
@(Html.CustomSelectList<Tag>("myId", Model, t => t.Name, t => t.Id.ToString()))