使用可选参数时的参数

本文关键字:参数 | 更新日期: 2023-09-27 18:18:15

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

有谁知道我该怎么做吗?还是说我注定要继续使用覆盖?

使用可选参数时的参数

你可以像这样给Razor视图添加using语句:

@using System.Linq.Expressions

不能添加System的原因。Linq命名空间对razor视图的影响是因为razor是基于动态类型和System的。Linq命名空间只包含扩展方法。由于动态的类型只有在运行时才知道,所以你不能在它上面使用扩展方法。