Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 ASP.NET MVC 3、Razor视图和可移植区域_Asp.net Mvc 3_Razor_Mvccontrib_Portable Areas - Fatal编程技术网

Asp.net mvc 3 ASP.NET MVC 3、Razor视图和可移植区域

Asp.net mvc 3 ASP.NET MVC 3、Razor视图和可移植区域,asp.net-mvc-3,razor,mvccontrib,portable-areas,Asp.net Mvc 3,Razor,Mvccontrib,Portable Areas,我正在尝试将可移植视图与ASP.NET MVC 3和razor视图结合使用,因为这似乎是创建简单插件体系结构的最佳方法。因此,我有我的类库设置,我的视图位于/Views/Admin/Index.cshtml中,它被设置为嵌入式资源。然后,我将该项目作为主web应用程序项目的依赖项包括在内。当我尝试访问管理控制器时,索引操作会收到一条消息,消息是找不到该视图文件(因此控制器被正确地包括在内)。我假设它试图查看主web应用程序项目,而不是portable areas二进制文件。有没有办法让razor

我正在尝试将可移植视图与ASP.NET MVC 3和razor视图结合使用,因为这似乎是创建简单插件体系结构的最佳方法。因此,我有我的类库设置,我的视图位于/Views/Admin/Index.cshtml中,它被设置为嵌入式资源。然后,我将该项目作为主web应用程序项目的依赖项包括在内。当我尝试访问管理控制器时,索引操作会收到一条消息,消息是找不到该视图文件(因此控制器被正确地包括在内)。我假设它试图查看主web应用程序项目,而不是portable areas二进制文件。有没有办法让razor视图与可移植区域一起使用?

您是否确保将视图标记为可移植区域中的嵌入式资源

我还发现便携区的一个很好的特性是,你可以覆盖嵌入的视图,因此如果你在你的主机应用程序中放置一个视图,该视图的名称和位置与嵌入的视图相同,代码逻辑不同,那么它将优先于嵌入的视图nice


希望这能有所帮助

我在这个问题上挣扎了一段时间,但我想我终于找到了答案

文件夹结构和名称空间在项目中的调用方式对于这项工作的正常进行非常重要

我这里有一个带有嵌入式razor视图的便携式区域的工作示例:

看看这个项目的结构

该区域的名称为
UserAdministration
,并且在项目的根目录中有一个
UserAdministrationRegistration
类,该类位于
UserAdministration
命名空间中。 然后有一个
Controllers
Models
Views
文件夹(就像普通的MVC项目一样),在
Views
文件夹下,还有一个
UserAdministration
文件夹,其中包含该区域的视图

还有一点对于嵌入式视图的工作非常重要:您必须在
global.asax.cs
文件的
Application\u Start
方法中注册一个新的视图引擎,您这样做了吗

PortableAreaRegistration.RegisterEmbeddedViewEngine();
而且。。。在您的注册类中,请确保覆盖采用2个参数(
AreaRegistrationContext上下文
IAApplicationBus总线
)的
RegisterArea
方法,并在其中调用基本实现:

public override void RegisterArea(AreaRegistrationContext),
i应用程序总线(总线)
{

基本注册表区域(上下文,总线);//我按照Fretje的回答中的说明进行操作,然后在您的网站中添加EmbeddedResourceVirtualPathProvider的nuget包引用。

感谢您的回答,这正是我想要的。我仍然得到视图未找到错误。它设置为embedded,但仍然没有。我必须添加nuget包r在我的网站中引用EmbeddedResourceVirtualPathProvider以使其正常工作。这看起来与我拥有的完全相同。它在我的开发机器上运行良好,但在部署后实际上不会查找写视图文件。我记录了它查找的视图,它完全跳过了.cshtml文件,尽管它确实找到了用于_layout和_viewst的文件art.我想这取决于注册视图引擎的顺序,如果嵌入式视图引擎是第一个,则可移植区域视图将覆盖根项目中的常规视图。作为旁注,我会说,通过清除所有视图引擎,并确保只注册了在根项目中使用的视图,有时可以获得较小的性能增益您的项目。仅查看引用?您是如何连接它的?在Visual Studio中,右键单击解决方案资源管理器中的引用并选择“添加库包引用”。在弹出窗口中选择“联机”,然后搜索“EmbeddedResourceVirtualPathProvider”然后单击安装。请注意,您需要更新为Service Pack 1的VS2010,以便Nuget package installer成为其中的一部分。