方法'Label'没有重载需要3个参数

Jer*_*oyd 4 asp.net asp.net-mvc overloading asp.net-mvc-3

我正在使用ASP.Net MVC 3,已经引用了所有正确的DLL(参见附带的截图),但由于某种原因,我得到了这个编译错误.

方法签名

Web.config程序集

编译错误

Tra*_*s J 7

这是一个奇怪的事情.我能够重现你的错误.我还能够弄清楚它为什么会发生以及如何绕过它.

为什么会这样

System.Web.Mvc.Html和之间存在命名空间冲突System.Web.WebPages.Html

碰撞的结果是什么

System.Web.Mvc.Html

此命名空间包含方法的定义

LabelExtensions.Label (HtmlHelper, String, String)

正如您将注意到的,这是占据先例并导致问题的命名空间.它只有两个重载.(String)(String, String).在测试时,这是唯一出现的选项.


如何绕过它

你真正想要的是这个命名空间

System.Web.WebPages.Html

此命名空间包含方法的定义

HtmlHelper.Label (String, String, IDictionary<String, Object>)

您现在可以看到要添加的可用性new { @class = "myClass" }.

创建自己的实例

得到你自己的HtmlHelper,绕过LabelExtension这样的:

剃刀

@{
 var h = new System.Web.WebPages.Html.HtmlHelper();
}
Run Code Online (Sandbox Code Playgroud)

ASP

<% var h = new System.Web.WebPages.Html.HtmlHelper(); %>
Run Code Online (Sandbox Code Playgroud)

确保它没有嵌套在剃须刀或<%=块内,因为它会阻止它可用.它需要处于页面的全局级别.

使用正确的标签

现在你可以用这个:

剃刀

@h.Label("firstName", "First Name", new { @class = "control-label" })

ASP

<%= h.Label("firstName", "First Name", new { @class = "control-label" }) %>