我在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)” %GT;
源文件: C:... \ MvcApplication1 \视图\节点\ Display.aspx
我读过这个错误可能是由于a codebehind class naming conflict造成的。但我认为这不是这种情况。
我是否可以不使用其他项目中的模型来创建强类型的ASP.NET MVC视图?
我尝试在我的Display.aspx页面上导入名称空间,但没有
<%@ Import Namespace="WpfApplication1" %>
或
<%@ Import Namespace="SolutionName.WpfApplication1" %>
或
<%@ Import Namespace="SolutionName.WpfApplication1.Model1Entities" %>
防止错误。
我已尝试将命名空间添加到我的Views / Web.config文件中,但不是
<add namespace="SolutionName.WpfApplication1" />
,也不
<add namespace="SolutionName.WpfApplication1.Model1Entities" />
防止错误。
自添加命名空间后,我现在收到此警告:
指定的命名空间或类型 导入'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)" %>
我不再看到警告。
但我仍然遇到运行时错误。
答案 0 :(得分:8)
仔细检查您的Views / Web.config是否具有引用项目的命名空间:
<system.web>
<pages>
<namespaces>
<add namespace="SolutionName.WpfApplication1.Model1Entities" />
</namespaces>
<pages>
</system.web>
更新:
我没有任何WPF应用程序来测试它......我以为你试图使用“类库”项目。这肯定会奏效。是否有可能稍微重构您的应用程序以将“模型”拉出到他们自己的项目中?这样您就可以将其编译为类库。
更新2:
奇怪的是,这几乎就像你的网页没有从System.Web.Mvc正确继承一样。确保您的Views / Web.config看起来像这样:
<?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<add path="*" verb="*"
type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<pages validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
<namespaces>
<add namespace="SolutionName.WpfApplication1.Model1Entities"/>
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
</handlers>
</system.webServer>
</configuration>
更新3: 运行时错误看起来好像不是MVC项目。
答案 1 :(得分:6)
你绝对可以!只需确保在视图中包含正确的命名空间:
<%@ Import Namespace="MyEntityNamespace" %>
答案 2 :(得分:1)
右键单击Web项目中的引用,然后选择“添加引用”。之后使用“项目”。
之后你可以使用Rex提供的答案(不是那里的Vb语法。我使用c#并且它是c#的语法)
它对我有用。
编辑:
使用
不