EDITED
我有问题。 ASP.NET MVC不会在* .aspx页面中将Model转换为适当的View Model。例如: 我将MyViewModel(带有属性MyProperty)传递给页面(在Controler中的Action中返回View(MyViewModel)),但是在运行时我得到这样的错误。
错误CS1061:'object'不包含'MyProperty'的定义,并且没有扩展方法'MyProperty'接受类型'object'的第一个参数可以找到(你是否缺少using指令或汇编引用?)
我的上下文中的对象是aspx页面中的Model对象。
我们正在使用此workround <% var model= Model as MyViewModel; %>
。并使用我们应该使用Model的模型。
如何使模型工作?
的 EDITED 的
这是最高指令
<%@ 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" %>
答案 0 :(得分:3)
您不应该尝试在视图中投射模型。请使用适当的强类型视图:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyViewModel>" %>
然后,请在您的视图中查看Model
。
如果您需要从EF域模型转换为视图模型,请在控制器方法中手动或使用Automapper等方法进行。
答案 1 :(得分:1)
我在将MVC2应用程序转换为MVC4后遇到了同样的问题。我的问题是在 Views文件夹中的Web.config文件中。我创建了一个新的MVC4项目,并在我现有的Views / Web.config之上复制了默认的Views / Web.config,解决了这个问题。
我相信问题出现在<pages>
节点,其中一些版本号不在4.我猜想pageParserFilterType因为问题的性质,但是我我不确定。在撰写我的特定版本时,这就是页面节点现在的样子,它对我有用:
<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>
答案 2 :(得分:0)
你是非常非常错误的,你不应该将查看强制转换为 ViewModel ,因为它总会返回false,null或抛出异常。
在相关示例中,例如在任何典型的M-V-VM相关项目中,与Model,View和ViewModel相关的类都是协方差的......
因此,M,V,VM松散耦合,因此没有共同的根类可以被翻译成。
这些层次结构不可能在一个树中,除了对象基类,因为这将破坏松耦合并从模型和视觉设计(视图,控件)中弃用分离表示逻辑(演示者,视图模型)的想法
在大多数DI框架中,依赖项作为公共只读属性注入,因此请尝试查看(取决于MVP,MV-VM,MVC实现),例如((1)dot(2)表示只读在名为(1)的类中的属性(2),其中一些也可能是内部的,因此无法访问:
属性的实际名称可能不同,但逻辑不是。
在您的情况下,您很可能错过了该财产:
<% var model= Model.ViewModel as MyViewModel; %>.
或
<% var model= (Model as MyModel).MyViewModel; %>.
或只是
<% var model= MyModel.MyViewModel; %>. (if you are the M-V-VM frameworks developer like me)