我在WPF项目中有一个名为Node的ADO.NET Entity Framework类.我想在同一解决方案中的不同ASP.NET MVC项目中使用它.
我的节点控制器:
Public Class NodeController Inherits System.Web.Mvc.Controller Function Display(ByVal id As Guid) As ActionResult Dim db As New WpfApplication1.Model1Entities Dim m As WpfApplication1.Node = (From n In db.Node _ Where n.Id = id _ Select n).First Return View(m) End Function End Class
当我运行项目并尝试导航到 http://.../Node/Display/[a valid ID]
我的显示操作出错:
'/'应用程序中的服务器错误.
编译错误
编译器错误消息:BC30456:'Title'不是'ASP.views_node_display_aspx'的成员.
来源错误:
第1行:<%@ Page Title =""Language ="VB"MasterPageFile ="〜/ Views/Shared/Site.Master"Inherits ="System.Web.Mvc.ViewPage(Of WpfApplication1.Node)"%>
源文件:C:...\MvcApplication1\Views\Node\Display.aspx
我读过这个错误可能是由于代码隐藏类命名冲突造成的.但我认为这不是这种情况.
我是否可以不使用其他项目中的模型来创建强类型的ASP.NET MVC视图?
我已尝试在Display.aspx页面上导入命名空间,但没有
<%@ Import Namespace="WpfApplication1" %>
要么
<%@ Import Namespace="SolutionName.WpfApplication1" %>
要么
<%@ Import Namespace="SolutionName.WpfApplication1.Model1Entities" %>
防止错误.
我已经尝试将命名空间添加到我的Views/Web.config文件中,但是没有
也不
防止错误.
自从添加命名空间后,我现在得到这个警告:
Imports的SolutionName.WpfApplication1'中指定的命名空间或类型不包含任何公共成员或无法找到.确保定义了名称空间或类型,并且至少包含一个公共成员.确保导入的元素名称不使用任何别名.
这是一个线索吗?
我已将模型从我的WpfApplication1移动到新的ClassLibrary1.
我清理了控制器.
Imports ClassLibrary1 Public Class NodeController Inherits System.Web.Mvc.Controller Function Display(ByVal id As Guid) As ActionResult Dim db As New Model1Entities Dim m As Node = (From n In db.Node _ Where n.Id = id _ Select n).First Return View(m) End Function End Class
我清理了我的视图.
<%@ Import Namespace="ClassLibrary1" %> <%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of Node)" %>
我不再看警告了.
但我仍然得到运行时错误.
仔细检查您的Views/Web.config是否具有引用项目的命名空间:
更新:
我没有任何WPF应用程序来测试它......我以为你试图使用"类库"项目.这肯定会奏效.是否有可能稍微重构您的应用程序以将"模型"拉出到他们自己的项目中?这样您就可以将其编译为类库.
更新2:
奇怪的是,这几乎就像你的页面没有从System.Web.Mvc正确继承.确保您的Views/Web.config看起来像这样:
更新3:运行时错误看起来不是MVC项目.
你绝对可以!只需确保在视图中包含正确的命名空间:
<%@ Import Namespace="MyEntityNamespace" %>