c# - HTML 帮助器中的第二个 lambda 表达式引发 CS0411

标签 c# asp.net-mvc

我的许多 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 帮助程序?

最佳答案

这两个字段很可能涉及两种不同的类型参数,即 Field1Field2,而您对这两个字段使用相同的 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/

相关文章:

c# - Linq To实体,从选择中选择

c# - 为什么 MailAddress 不拒绝电子邮件地址 someName@gmail?

c# - 如何获取当前用户的SelectList

asp.net-mvc - 使用 MVC 和 OAuthWebSecurity 登录 Twitter

.net - 什么是 session 和 session 变量?

c# - 无法在 Visual Studio 2012 中调试 Windows 服务

c# - 我怎样才能删除这个网格中多余的瓷砖?

c# - XNA 中的 FPS 风格相机目标计算

asp.net-mvc - 如何在 ASP.NET MVC 和 Entity Framework 中扩展模型?

javascript - AJAX 调用未将值传递给操作