0

我目前正在编写覆盖以提供自己的 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 });

有谁知道我怎样才能做到这一点?还是我注定要继续使用覆盖?

4

2 回答 2

0

不能将 System.Linq 命名空间添加到 razor 视图的原因是因为 razor 基于动态类型,而 System.Linq 命名空间仅包含扩展方法。由于动态的类型仅在运行时才知道,因此您不能在其上使用扩展方法。

于 2013-06-19T06:28:23.487 回答
0

您可以将 using 语句添加到 Razor 视图,如下所示:

@using System.Linq.Expressions
于 2013-06-16T01:29:29.860 回答