【问题标题】:Strongly typed MVC View Model强类型 MVC 视图模型
【发布时间】:2013-04-10 08:38:27
【问题描述】:

我正在尝试强烈键入呈现为 ASP.NET ASPX 页面的 MVC 视图模型。一切都在一个大项目中。但是,它说它找不到名称空间,我做错了什么?

这是错误:

CS0234: The type or namespace name 'MyModel' does not exist in the namespace 
'MyProject.Models' (are you missing an assembly reference?)

这是我的自定义模型:

namespace MyProject.Models {
    public class MyModel{
        public string companyID { get; set; }
        public MyModel(string companyID){
            this.companyID = companyID;
        }
    }
}

这是我在 ASPX 中呈现的强类型视图,文件名为 MyStronglyTypedView.aspx:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyProject.Models.MyModel>" %>
<%@ import namespace='MyProject.Models' %>
.....
<script runat="server">
    protected void Page_Load(object sender, EventArgs e) {
        var curCompany = Model.companyID;
    }
</script>
....

这是我调用页面并将模型传递给它的方式(我在单独的 Razor 页面上将其作为部分调用):

@Html.Partial("MyStronglyTypedView",new MyProject.Models.MyModel("1"))

【问题讨论】:

  • MyProject.Models 是否在与您的 Web 应用程序项目分开的程序集中定义?您是否在您的网络应用中明确包含对 MyProject.Models 的引用?
  • 不,一切都在一个项目中,所以我认为它不需要包含自己作为参考。
  • 顺便说一句。为什么要标记“剃须刀”?你不使用“剃须刀”……[恕我直言,这很奇怪]
  • 我在单独的 razor 页面上调用 aspx 页面,注意最后一个代码块。

标签: c# asp.net-mvc razor


【解决方案1】:

您遇到的错误是由于不正确的Page 指令Inherits 属性值。指令是 ASP.NET 标记的一部分,因此不是特定于语言的。例如

System.Web.Mvc.ViewPage<MyProject.Models.MyModel>

是您在 C# 中指定泛型类型的方式,但在 VB.NET 中却是这样

System.Web.Mvc.ViewPage(of MyProject.Models.MyModel)

总而言之,这里的类型应该用 CLR 表示法指定。在您的情况下,它可能看起来像

System.Web.Mvc.ViewPage`1[[MyProject.Models.MyModel, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

这就是所谓的完全限定类型名称。要查看特定类型的此名称,可以使用Type.FullName 属性:

Type targetType = typeof(System.Web.Mvc.ViewPage<MyProject.Models.MyModel>);
string name = targetType.FullName;

【讨论】:

  • 您确定您的语法正确吗? `1 怎么了?
  • @YongkeBillYu,这就是所谓的完全限定类型名称,而 `1[[..]] 是泛型在此表示法中的指定方式。
  • 我试过了,它不起作用,它说它无法加载类型 MyProject.Models.MyModel。
  • @YongkeBillYu,您确定您指定的类型名称正确吗?要获得正确的完全限定类型名称,请参阅帖子更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多