使用可选参数时的参数参数

时间:2013-06-14 05:52:42

标签: c# asp.net-mvc generics razor

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

有没有人知道如何才能使这项工作?或者我注定要继续使用覆盖?

2 个答案:

答案 0 :(得分:0)

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

@using System.Linq.Expressions

答案 1 :(得分:0)

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

相关问题