2010-09-02 75 views
0

我接管了一个相当大的ASP.NET MVC项目,我只是想让它在我的电脑上工作。这是asp.net MVC 1项目,我将继续使用Visual Studio 2010进行开发。我已经设置了数据库和所有东西,但是我有一个奇怪的问题,并且不知道为什么会发生这种情况:传递给视图的强类型模型作为对象处理。为什么?

该项目使用强类型视图但不知何故,所有的模型只是简单的对象而不是视图中的实际类型(在每个视图中)。我已经尝试过,我可以将模型转换为真实类型(Model as RealType),然后它可以工作,虽然它很丑,我不想在项目中的500个位置做....当我尝试运行应用程序我得到的错误是这样的:

CS1061:“对象”中不包含关于“SomeProperty”和没有扩展方法“SomeProperty”接受型“对象”的第一个参数的定义可以发现

五言中该模型实际上有一个名为SomeProperty属性,我可以访问后,我把它...

任何人有任何想法,为什么是这样的?

非常感谢您的帮助

回答

0

在几乎陷入精神崩溃之后,我终于设法使其工作,但我仍然不明白究竟是什么问题。我在这里写了一个解决方案,因为它可能有助于某人:因此,该问题以某种方式使用Visual Studio 2010与asp.net mvc 1.默认情况下,VS2010将第一次打开时将mvc1项目更新为mvc 2。所以首先你做的很明显:将Web引用而不是2.0版本更改为1.0版本,并且在web.config中,您只需在汇编部分更正版本即可。

而且来这里的大招(没有这对我来说是ViewPage.Model不是强类型,但一个普通的对象):你必须把同样在web.config中的以下内容:

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

是,你说旧版本是2,新版本是1(而不是像我第一次那样删除这一部分)。这解决了这个问题....

+0

这可能不是最好的解决方案。下面是Microsoft官方文档的链接,它解释了如何正确执行此操作:http:// download。 microsoft.com/download/F/1/6/F16F9AF9-8EF4-4845-BC97-639791D5699C – 2010-09-02 20:04:02

+0

在VS将其转换为MVC2后会恢复原来的web.config吗? – 2010-09-02 20:09:16

+0

是的,我很乐意听到更好的解决方案。但你建议的链接被破坏了某种方式... – apolka 2010-09-03 07:53:16

0

在您的视图的第一线,确保它是强类型:的

<%@ Page Language="C#" 
     MasterPageFile="~/Views/Shared/Site.Master" 
     Inherits="System.Web.Mvc.ViewPage<RealType>" %> 

代替:

<%@ Page Language="C#" 
     MasterPageFile="~/Views/Shared/Site.Master" 
     Inherits="System.Web.Mvc.ViewPage" %> 

同为强代表真键入的部分(ascx)。

+0

是的,不幸的是它在意见的第一行强类型...任何其他的想法?非常感谢。 – apolka 2010-09-02 17:03:01

+0

当你在视图中的'Model'属性上按F12时,你会采取哪些操作? – 2010-09-02 17:04:55

+0

我被带到ViewPage类的Model属性(在System.Web.Mvc命名空间中),它确实是对象.... – apolka 2010-09-02 17:08:31

2

我遇到了同样的问题,虽然我不确定我确实做了什么来解决它,但我可以分享我在别人遇到同样问题时所做的更改。我将MVC 1应用程序升级到MVC 3,并遇到与原始海报相同的问题。从我所知道的情况来看,web.config是这种情况的罪魁祸首,我所做的更改如下。

从你的web.config删除此:

<httpHandlers> 
    <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
</httpHandlers> 

<system.webServer>取出<handlers>部分。当您完成后,它应该是这样的:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

添加<runtime>元素之后<system.webServer>

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

这个答案仍然有效,即使使用newVersion =“4.0.0.0”,显然你必须告诉Mvc以一种老式的方式行事,那么新的方式是什么?我的页面有什么不同? – Richard 2013-03-24 20:36:20

相关问题