ASP.NET MVC - 使用C#将引用不同程序集的模型从Controller传递到View

Mr.*_*ith 1 c# asp.net-mvc views models

给定两个组件:

project.web
project.lib

project.web程序集引用了包含一些业务逻辑的project.lib.来自project.lib的一个简单类:

public class Person
{
    public string Name;
}
Run Code Online (Sandbox Code Playgroud)

在project.web.Controllers中:

Using project.lib.models;

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

    public ActionResult Index()
    {
        return View(person);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我有一些问题的部分.在很多示例项目中,我在View中看到了以下内容(在本例中为Index.aspx):

<% @Import Namespace="project.lib.models" %>
Run Code Online (Sandbox Code Playgroud)

允许您像这样使用Model对象:

<%= Model.Name %>
Run Code Online (Sandbox Code Playgroud)

我没有像工作那样工作,我必须这样做:

<%= (Model as Person).Name %>
Run Code Online (Sandbox Code Playgroud)

要么

<%
    var person = (Person)Model;
    Response.Write(person.Name);
%>
Run Code Online (Sandbox Code Playgroud)

这是为什么呢?这种情况的原因是什么?评论?建议?我的类定义如下所示:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Zha*_*uid 8

您可以发布<%@ Page%>指令吗?它应该是这样的:

<%@ Page Language="C#"
         [...]
         Inherits="System.Web.Mvc.ViewPage<project.lib.models.Person>" %>
Run Code Online (Sandbox Code Playgroud)

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

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

<%@ Page Language="C#" 
    CodeBehind="Index.aspx.cs" Inherits="project.web.Views.People.Index" %>
Run Code Online (Sandbox Code Playgroud)

然后在代码隐藏中:

namespace project.web.Views.People.Index {
  public partial class Index : System.Web.Mvc.ViewPage<project.lib.models.Person>
  {}
}
Run Code Online (Sandbox Code Playgroud)

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