【问题标题】:The call is ambiguous: Html.LabelFor调用不明确:Html.LabelFor
【发布时间】:2013-08-28 23:17:48
【问题描述】:

我刚刚将我的 MVC3 应用程序升级到 MVC4 并且在运行时遇到错误。 (修剪下来看起来更好)

错误 CS0121:以下方法或属性之间的调用不明确: 'MyWebCore.HtmlHelperExtensions.LabelFor<CoreViewModel,string>(System.Web.Mvc.HtmlHelper<CoreViewModel>, System.Linq.Expressions.Expression<System.Func<CoreViewModel,string>>, object)' 和
'System.Web.Mvc.Html.LabelExtensions.LabelFor<CoreViewModel,string>(System.Web.Mvc.HtmlHelper<CoreViewModel>, System.Linq.Expressions.Expression<System.Func<CoreViewModel,string>>, object)'

我有自己的 LabelHelperExtensions 类,其中包含 LabelFor 方法。我的两个 Web.config 文件都引用了 MVC4。如何使用我的扩展方法而不是 MVC 方法?

我的 web.config:add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35

我的观点/web.config:add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc"

【问题讨论】:

  • 您是否检查了您在 web.config 中设置为 MVc 的版本?可能您的 mvc 应用程序引用了两个版本的 MVC 程序集。
  • @FelipeOriani 不,我的两个 web.config 文件都引用了 MVC 4.0
  • 嗨!我遇到了和你一样的错误。你找到解决方案了吗?谢谢

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

我有许多级联的重写方法,它们反映了 LabelExtensions 类的 MVC 版本的结构。我无法将它们全部删除,但我找出了导致问题的原因并将其删除。

【讨论】:

    【解决方案2】:

    首先,当已经有另一种方法可以做到这一点时,为什么还要尝试覆盖 MVC 的 LabelFor 扩展?

    http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs

    你可能有正当理由去做你正在做的事情,我不知道,但我会研究扩展这些助手的受支持方式。

    【讨论】:

    • 感谢您的帮助,不是我的确切解决方案,而是让我弄清楚了。我删除了一个被覆盖的方法,它起作用了。
    【解决方案3】:

    我有自己的 LabelHelperExtensions 类,其中包含一个 LabelFor 方法。如何使用我的扩展方法而不是 MVC 方法?

    不是唯一的选择,但重命名您的方法以避免与已知的扩展方法冲突将是最干净的。您也可以直接调用静态方法(以静态类名开头的方法),但这会破坏使用扩展方法的目的。

    【讨论】:

    • 感谢您的帮助,不是我的确切解决方案,而是让我弄清楚了。
    • 这应该是公认的答案。 MVC3 没有这种能力,所以很多人编写了自己的扩展类来拥有 LabelFor 功能。现在升级到 MVC4 会导致冲突,因为它现在具有 LabelFor 方法,因此解决方案是删除您自己的扩展名(或将其重命名为具有不同的名称/签名)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-10-05
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多