在模糊的RenderAction之间调用

时间:2009-11-24 17:36:37

标签: asp.net-mvc-2 .net-4.0

我最近将我的ASP.NET MVC 2 Preview 2 / .NET 4应用程序(使用VS 2010 Beta 2构建)上传到MaximumASP.com的测试版网站,当我尝试运行它时,我收到以下错误:

  

CS0121:以下方法或属性之间的调用不明确:'System.Web.Mvc.Html.ChildActionExtensions.RenderAction(System.Web.Mvc.HtmlHelper,string,string)'和'Microsoft.Web.Mvc。 ViewExtensions.RenderAction(System.Web.Mvc.HtmlHelper,string,string)'

此错误未显示在我的开发人员计算机上(Windows 7,VS 2010)。知道是什么导致了这个吗?


更新

我确保我使用我的项目上传的.dll是可以正常使用Visual Studio 2010 Beta 2的。但是当我将它上传到我的主机时仍然会出现同样的错误。

我的主机正在使用最新版本的ASP.NET MVC 2(Beta),但我在web.config中引用旧的预览.dll并将它们上传到BIN文件夹中,但仍然没有。

-

5 个答案:

答案 0 :(得分:3)

就我而言,从ASP.NET MVC 1中删除对旧Microsoft.Web.Mvc库的引用解决了这个问题。

答案 1 :(得分:2)

MV20在VS2010中支持 NOT ...这就是预览2(尽管RenderAction是MVC2 Beta的一部分吗?)?

http://haacked.com/archive/2009/11/17/asp.net-mvc-2-beta-released.aspx

  

不幸的是,因为Visual Studio   2010 Beta 2和ASP.NET MVC 2 Beta   共享当前的组件   不同步,运行ASP.NET MVC 2   不支持VS10 Beta 2上的Beta版。

答案 2 :(得分:0)

您能在开发计算机和主机上为我们提供 typeof(Controller).Assembly.GlobalAssemblyCache 的输出吗?如果您的控制器代码能够运行,您可以只使用Response.Write(),然后使用Response.End()。这将导致您的视图无法渲染,因此希望您可以避免该错误。

修改

由于您的主机已经GAC了MVC二进制文件,您需要根据您的主机使用的二进制版本编译您的站点; bin-deployment不起作用。如果您的主机已安装MVC 2 Beta,则需要针对MVC 2 Beta二进制文件编译您的站点。不幸的是,这意味着您必须使用VS2008 + MVC 2 Beta编译您的站点,因为VS2010 Beta 2包含MVC 2 Preview 2,这是早于您的主机部署的版本。

作为一个完全不受支持的解决方法,可能会使VSC10 Beta 2上运行MVC 2 Beta,请在Phil的博客上查看this comment。请注意,我的意思是完全不受支持 - 它可能会影响VS的其他部分,防止卸载并需要重新格式化机器,导致机器放射性等等。

或者,请让您的主机为GAC部署Beta二进制文件并让他们取消GAC。 :)然后你可以bin-deploy你正在编译的特定二进制文件。

答案 3 :(得分:0)

我能想到的两件事;首先,您可以确保不在所有页面上导入其中一个名称空间(例如,从任何<%Import%>语句和system.web / pages / namespaces区域中删除Microsoft.Web.Mvc.ViewExtensions web.config。但遗憾的是,你不能轻易地引用该程序集中的扩展方法。

MSDN论坛上提供的

An alternative选项是编写您自己的扩展方法,它只包装您想要调用的方法,并具有完全不同的名称(例如,BaddieRenderAction())。

这两个选项都不是很好,但是第二个选项至少可以轻松启动和运行,然后将来发布MVC 2时你的供应商GACed程序集不会导致问题,你可以做一个搜索和替换“BaddieRenderAction” - > “RenderAction”,它都是固定的。

答案 4 :(得分:0)

而不是包装Render Action,只需显式调用扩展方法,如下所示: Microsoft.Web.Mvc.ViewExtensions.RenderAction(Html,...)