【发布时间】:2013-06-14 05:52:41
【问题描述】:
我目前正在编写重写以提供自己的 MVC 控件实现。我想使用可选参数,这样可以节省我编写和维护多个覆盖的工作,就像我现在解决的那样。
我的电话示例
public static MvcHtmlString MyControlFor<TModel, TValue>(this HtmlHelper<TModel> html
, Expression<Func<TModel, TValue>> expression
, object htmlAttributes = null
, params Expression<Func<TModel, object>>[] expressions)
当使用可选参数而不是全部提供时,我需要使用命名参数。我也知道在这种情况下,您需要将数组对象传递给 params 参数才能工作。但是在这里我无法弄清楚我该如何做到这一点。
调用以下命令会出现以下错误(CS0826:未找到隐式类型数组的最佳类型):
@Html.MyControlFor(x => x.property, expressions: new [] { x=>x.property2, x=>x.property3 });
传递强类型数组似乎也不是一个解决方案,因为编译器无法识别 Expression 类。所以以下似乎不起作用
@Html.MyControlFor(x => x.property
, expressions: new Expression<Func<TModel, object>>[] { x=>x.property2, x=>x.property3 });
有没有人知道我怎样才能做到这一点?还是我注定要继续使用覆盖?
【问题讨论】:
-
包括 System.Linq?这在我看来应该可以工作。我想知道 Expression 是否存在于命名空间中的其他地方,因为它完全不同。不过,我对 MVC 并不熟悉。
-
您的强类型版本应该可以使用。至少它与我的 Visual Studio 2012 一起编译没有错误。您说编译器无法识别 Expression 类,您是否有“使用 System.Linq.Expressions;”代码中的语句?
标签: c# asp.net-mvc generics razor