鉴于两个组件:

的项目。网
的项目。lib

这一项目。网组件引用的项目。lib其中包含了一些业务逻辑。一个简单的类项目。lib:

public class Person
{
    public string Name;
}

在项目。网。控制器:

Using project.lib.models;

public class PersonController : Controller
{
    Person person = new Person();

    public ActionResult Index()
    {
        return View(person);
    }
}

这是该部分在这里我有一些问题。在很多样项目中,我们看到下面在图(在这种情况的索引。aspx):

<% @Import Namespace="project.lib.models" %>

让你使用的模型对象是这样的:

<%= Model.Name %>

我还没有得到这工作像的例子,我已经做到:

<%= (Model as Person).Name %>

<%
    var person = (Person)Model;
    Response.Write(person.Name);
%>

这是为什么这样?是什么原因这thusness?评论?建议?我的类的定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace project.lib.models
{
    public class Person
    {
        public Int64 PersonID;
        public string DisplayName;
        public string RealName;
    }
}
有帮助吗?

解决方案

您的观点可能不是强类型的。请尝试以下方法:

  1. 复制查看标记
  2. 删除视图
  3. 转到驱动视图的控制器操作
  4. 在此方法中右键单击,选择“添加视图”选项。
  5. 确保这是一个强类型视图,并且您可以正确识别所需模型的类型。
  6. 将View标记粘贴到新创建的视图中。
  7. 这应该有效。它看起来不像你错过了一个程序集,因为你能够正确地转换模型。

    应该注意的是,您可以执行上述操作,而无需删除/恢复视图。每个视图都有一个声明作为其第一行,类似于以下内容:

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

    要理解的重要部分是Inherits属性,这意味着此View扩展了MVC ViewPage<DomainModel.Person>类。 Model属性在运行时将是DomainModel.Person类型。

    此外,以前版本的ASP.NET MVC存在一些问题,可以有效防止强类型视图正常工作。请参阅使用添加问题在ASP.NET MVC RC1中查看强类型视图的对话框以获取更多详细信息。

    编辑:经过此处发布的所有人的一些侦探工作后,看起来Visual Studio正在引用包含Person类的程序集的旧版本。关闭开发环境,清除所有obj / bin文件夹,然后重新启动似乎解决了这个问题。

其他提示

您能否发布<!> lt;%@ Page%<!> gt;指示?它应该是这样的:

<%@ Page Language="C#"
         [...]
         Inherits="System.Web.Mvc.ViewPage<project.lib.models.Person>" %>

您是否尝试过为此视图创建强类型代码隐藏文件?

您需要将视图的inherits属性更新为代码隐藏文件:

<%@ Page Language="C#" 
    CodeBehind="Index.aspx.cs" Inherits="project.web.Views.People.Index" %>

然后在代码隐藏中:

namespace project.web.Views.People.Index {
  public partial class Index : System.Web.Mvc.ViewPage<project.lib.models.Person>
  {}
}

我不认为这是解决System.Web.Mvc.ViewPage类的问题,因为页面不会加载(你会得到一个例外,因为System.Web.Mvc.ViewPage不能发现),你甚至无法访问Model属性。

更新1: 注意,你可以相当肯定,这不是一个问题料/获取的类型 系统。网。视.ViewPage的项目。lib。模型。人.正如你所提到,在你的问题,它的工作时使用:

<% @Import Namespace="project.lib.models" %>
...
<%= (Model as Person).Name %>

使用 System.Web.Mvc.ViewPage<project.lib.models.Person> 在网页上指令,和 <%= Model.Name %> 必须工作。一些额外的东西,我会尝试,如果不工作:

  • 删除的进口指令的时候这样做。
  • 如果你有名字空间加入上网。config。

而那些没有上述2,应该引起任何麻烦,如果你没有得到这工作有什么是前面提到,这将是一个非常奇怪的情况。还要注意的是,如果你有没有增加常用的名称空间中的网站。config可以使用 ViewPage<Person> 在网页上指令。


模型。名称 你是指不具有与进口空间,你会得到它的种类设置的网页的指令。

ViewPage类拥有的财产,T型,这就是为什么你会得到访问该名称属(你的工作类型的规定)。

要做到这一点,你的视图应该强烈输入你的模型对象,在你的情况下是Person类

所有你需要使它工作的是向project.lib添加refrence并添加更新页面derictive:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Project.lib.Models.Person>" %>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top