“在MVC3中,方法'LabelFor'没有重载需要2个参数”

时间:2011-02-27 02:23:03

标签: asp.net-mvc asp.net-mvc-3

我正在运行ASP.NET MVC 3,我正在查看模型的编辑视图。我有一个FullName属性,我想将其呈现为“全名”。

以下是违规行:

<div class="display-label">
    <%: Html.LabelFor(model => model.FullName, "Full name") %>
</div>

现在intellisense 显示过载存在 - 有两个签名,第一个只接受表达式,第二个接受表达式和要显示的字符串。但是,当我浏览页面时,我得到了标题异常('无重载......')。

任何人都有使用此重载的任何成功,以及有关我可能缺少的任何建议吗?


更新:我尝试重新安装MVC3无济于事。但是我在错误页面的编译器输出中注意到了这一点:

c:\Windows\assembly\GAC_MSIL\System.Web.Mvc\2.0.0.0__31bf3856ad364e35\
    System.Web.Mvc.dll: (Location of symbol related to previous error)

这向我表明我使用的是MVC 2,而不是MVC 3.

我错误配置了什么,或者为什么我的IIS会使用MVC 2而不是MVC 3?我该如何解决这个问题?

5 个答案:

答案 0 :(得分:8)

如果这是一个MVC 2项目,你应该检查你的web配置。

您可能在项目参考中引用了DLL的正确版本,但在运行时在Web配置中引入了2.0.0.0?

http://blog.devlpr.net/2010/07/27/upgrading-an-asp-net-mvc-2-project-to-asp-net-mvc-3/

在我的MVC3应用中:

<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

答案 1 :(得分:4)

而不是这样做,用[DisplayName]属性装饰字段:

[DisplayName("Full name")]
public string FullName { get; set; }

然后你可以使用常规重载:

<%: Html.LabelFor(model => model.FullName) %>

答案 2 :(得分:2)

您需要确保在项目中引用MVC 3.0。由于这个程序集有一个强大的名称,你应该得到它或失败。

为此,在Visual Studio中,选中Solution Explorer,[Project],References,单击System.Web.Mvc,然后检查属性网格中的'Version'属性。它应该是3.x。

如果你有,那么检查web.config或machine.config并确保MVC 2.x上没有强制重定向。

为此,在项目的所有Web.config文件中,全局并替换MVC版本(通过此System.Web.Mvc替换此System.Web.Mvc,Version = 2.0.0.0,Version = 3.0.0.0)

最后,您还可以使用root web.config中的此代码段强制重定向从2到3:

...
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
...

答案 3 :(得分:1)

有一个overload需要两个参数。

但你可以试试

 <%: Html.LabelFor(model => model.FullName) %>

并在您的模型中

public class ModelClass{

..
..

[DisplayName("Full Name")]
public string FullName{

答案 4 :(得分:0)

方法LabelFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>, String)是在MVC 3.0上引入的。

比较
http://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions(v=vs.98).aspx

http://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.aspx(MVC 2.0)。

  

然而,当我浏览页面时我   得到标题的例外('没有   过载...')。

也许你的IIS上没有激活MVC 3.0。