Asp.net mvc 3 ASP.NET MVC没有';将aspx页面中的模型对象强制转换为已将模型发送到此页面的相应对象
已编辑 我有个问题。ASP.NET MVC不会将模型强制转换为*.aspx页面中的相应视图模型。例如: 我将MyViewModel(带有Property MyProperty)传递给了page(在Controller中返回视图(MyViewModel)),但在运行时我得到了如下错误 错误CS1061:“对象”不包含“MyProperty”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“MyProperty”(是否缺少using指令或程序集引用?) 其中,我的上下文中的对象是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
。在我们应该使用模型的地方使用模型。
如何使模型工作
已编辑
这是最高指示
<%@ 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绑定、行为、数据绑定)
- 类抽象视图->…->您的视图(页面、屏幕等)李>
- 类抽象模型->…->您的模型(算法、业务层等)
- 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>