我的许多 HTML 助手都将 lambda 表达式作为参数。从 MVC View 调用助手,并且 lambda 表达式为助手提供 View 底层模型中的字段之一。以下工作正常:
//Helper:
public static MvcHtmlString MyHelper<T, TValue>(this HtmlHelper<T> helper,
Expression<Func<T, TValue>> Parameter1
/*More parameters*/)
//View:
@Html.MyHelper(m => m.Field1 /*More parameters*/)
我想添加第二个参数,使模型中的第二个字段可供助手使用,沿着这条线:
//Helper:
public static MvcHtmlString MyHelper<T, TValue>(this HtmlHelper<T> helper,
Expression<Func<T, TValue>> Parameter1,
Expression<Func<T, TValue>> Parameter2
/*More parameters*/)
//View:
@Html.MyHelper(m => m.Field1,
m => m.Field2 /*More parameters*/)
该 View 生成 CS0411 编译错误(无法从用法中推断出方法“...”的类型参数。请尝试显式指定类型参数。)。我了解错误消息的核心,但不知道如何将其映射到这种情况。
以下内容确实可以编译,但我不知道如何获取 Helper 方法旁边的两个参数:
//View:
@Html.MyHelper(m => new
{
m.Field1,
m.Field2
} /*More parameters*/)
我应该如何将多个字段(列)从 View 的基础模型传输到 HTML 帮助程序?
最佳答案
这两个字段很可能涉及两种不同的类型参数,即 Field1
和 Field2
,而您对这两个字段使用相同的 TValue
。
因此,当我们调用帮助器时,两个属性的类型可能不同。
在这种特殊情况下,您将需要引入第三个类型参数。
所以尝试这样:
public static MvcHtmlString MyHelper<T, TParam1,TParam2>(this HtmlHelper<T> helper,
Expression<Func<T, TParam1>> Parameter1,
Expression<Func<T, TParam2>> Parameter2
/*More parameters*/)
由于两个属性的类型可能不同,因此通用的 TValue
参数不起作用。
关于c# - HTML 帮助器中的第二个 lambda 表达式引发 CS0411,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53629834/