使用可选参数时的参数
本文关键字:参数 | 更新日期: 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命名空间只包含扩展方法。由于动态的类型只有在运行时才知道,所以你不能在它上面使用扩展方法。