我定义了一个名为BootstrapDropDownFor
的扩展方法,它的定义是
public static IHtmlString BootstrapDropDownFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, dynamic options, string defaultOption)
当尝试在.cshtml
文件中使用它时
@Html.BootstrapDropDownFor(m => m.RequestType, ViewBag.RequestTypes, "-- Select --")
我得到以下错误:
'HtmlHelper<WebPermissionModel>' does not contain a definition for 'BootstrapDropDownFor' and the best extension method overload 'HtmlHelpers.BootstrapDropDownFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>, dynamic, string, string)' requires a receiver of type 'HtmlHelper<TModel>'
但是,通过向options
参数添加强制转换,我可以消除错误,如下所示。
@Html.BootstrapDropDownFor(m => m.RequestType, (object) ViewBag.RequestTypes, "-- Select --")
为什么添加强制转换可以解决这个问题?
发布于 2018-07-06 04:35:52
扩展中不支持动态,请检查以下内容:
Extension methods cannot be dynamically dispatched
Extension method and dynamic object
What causes "extension methods cannot be dynamically dispatched" here?
必须先显式转换动态类型,然后才能将其传递给方法
将动态参数更改为object或exact类型:IEnumerable<SelectListItem>
public static IHtmlString BootstrapDropDownFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> options, string defaultOption = "-- select --")
https://stackoverflow.com/questions/51199295
复制相似问题