Asp.net mvc 3 ASP.NET MVC没有';将aspx页面中的模型对象强制转换为已将模型发送到此页面的相应对象

Asp.net mvc 3 ASP.NET MVC没有';将aspx页面中的模型对象强制转换为已将模型发送到此页面的相应对象,asp.net-mvc-3,Asp.net Mvc 3,已编辑 我有个问题。ASP.NET MVC不会将模型强制转换为*.aspx页面中的相应视图模型。例如: 我将MyViewModel(带有Property MyProperty)传递给了page(在Controller中返回视图(MyViewModel)),但在运行时我得到了如下错误 错误CS1061:“对象”不包含“MyProperty”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“MyProperty”(是否缺少using指令或程序集引用?) 其中,我的上下文中的对象是as

已编辑

我有个问题。ASP.NET MVC不会将模型强制转换为*.aspx页面中的相应视图模型。例如: 我将MyViewModel(带有Property MyProperty)传递给了page(在Controller中返回视图(MyViewModel)),但在运行时我得到了如下错误

错误CS1061:“对象”不包含“MyProperty”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“MyProperty”(是否缺少using指令或程序集引用?)

其中,我的上下文中的对象是aspx页面中的模型对象

我们正在使用此工作区
。在我们应该使用模型的地方使用模型。 如何使模型工作

已编辑

这是最高指示

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/BaseViewMaster.Master" Inherits="System.Web.Mvc.ViewPage<Organization.Core.ViewModels.Models.MyViewModel>" %>

<%@ Import Namespace="Resources" %>
<%@ Import Namespace="Organization.Core.ViewModels.Models" %>

母版页:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<Organization.Core.ViewModels.Models.BaseViewModel>" %>
<%@ Import Namespace="Organization.Core.ViewModels.Models" %>

您不应该试图在视图中强制转换模型。请改用适当的强类型视图:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyViewModel>" %>

然后,只需参考视图中的
Model


如果您需要从EF域模型转换到视图模型,请使用控制器方法手动或使用Automapper之类的工具进行转换。

您大错特错了,您不应该将视图转换为视图模型,因为它将始终返回false、null或引发异常

在相关示例中,例如在任何典型的M-V-VM相关项目中,与Model、View和ViewModel相关的类都是协方差的

因此,M、V、VM是松散耦合的,因此没有要转换成的公共根类

  • 抽象视图模型->…->视图的视图模型(UI绑定、行为、数据绑定)
  • 抽象视图->…->您的视图(页面、屏幕等)
  • 抽象模型->…->您的模型(算法、业务层等)
除了对象基类之外,这些层次结构不可能在一个树中,因为这将打破松散耦合,不赞成将表示逻辑(演示者、视图模型)与模型和可视化设计(视图、控件)分离

在大多数DI框架中,依赖项作为公共只读属性注入,因此请尝试查看(取决于M-V-p、M-V-VM、M-V-C实现),例如((1)点(2)表示名为(1)的类中的只读属性(2),其中一些也可能是内部的,因此无法访问:

  • ViewModel.View
  • ViewModel.Model
  • View.ViewModel
  • Model.ViewModel
属性的实际名称可能不同,但逻辑不同

在您的情况下,您很可能错过了该属性:

<% var model= Model.ViewModel as MyViewModel; %>. 

或者干脆

<% var model= MyModel.MyViewModel; %>. (if you are the  M-V-VM frameworks developer like me)
(如果您是像我一样的M-V-VM框架开发人员)

在将MVC2应用程序转换为MVC4后,我遇到了相同的问题。我的问题出现在视图文件夹中的Web.config文件中。我创建了一个新的MVC4项目,并将默认视图/Web.config复制到现有视图/Web.config之上,从而修复了问题

我相信问题出在
节点上,其中一些版本号不在4。由于问题的性质,我猜是pageParserFilterType,但我不确定这一点。在编写我的特定版本时,pages节点现在看起来是这样的,它对我有效:

<pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>


我们使用这个Inherits=“System.Web.Mvc.ViewPage。它在这个项目中不起作用。我认为您需要提供更多详细信息。发布视图代码(至少在顶部有所有指令)。你是什么意思,它不起作用?你在运行时遇到ASP.NET编译错误吗?你是否在视图中或web.config的部分中@include'd了
MyViewModel
的命名空间?我添加了有问题的指令。是的,我在运行时遇到ASP.NET错误。---你是否@include'd了视图或web.config中MyViewModel的命名空间web.config的一节;回答:不。它也没有帮助。恕我直言。你应该再次阅读我的问题。你应该阅读Steve Morgan说的话和我的评论。问题不在于命名我的模型或ViewModel。问题在于,当我在我的aspx文件(在视图中)m.Deck中写入类似内容时,我会出现运行时错误%>或.ASP.NET MVC在模型对象中看不到Deck属性。解决方法是使用这行代码,然后在此处编写Model.Deck)%>或相同的问题。您是否找到了真正的解决方案?是的,请阅读我对Artur Mustafin的评论。这只是一个解决方法:(我最后也做了同样的事情。。。
<pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>