如何在asp.net mvc中使用来自另一个项目的部分视图

本文关键字:项目 另一个 视图 asp net mvc | 更新日期: 2023-09-27 18:07:20

我有两个MVC项目,一个作为父项目,另一个作为子项目。子项目添加对父项目的引用。我喜欢使用父项目和子项目的局部视图,比如-

@Html.Partial("_GenericGreeting")<--在子项目中

_GenericGreeting.cshtml<--在母项目中

子项目是启动的项目。我的意思是,父项目就像一个基础/共享项目。RazorGenerator已经安装在两个项目上,每个项目都可以编译成单个程序集。

当我运行该项目时,我只得到以下错误。

未找到部分视图"_GenericGreeting"或没有视图引擎支持搜索到的位置。

如果我复制局部视图并将其粘贴到子项目中,这很好,但我不想复制文件。

我试过这个帖子,但没有运气,但也许我添加不对。

如何在asp.net mvc中使用来自另一个项目的部分视图

不是很好,但可以解决问题的简单解决方案。其中一个重载@Html.Partial()允许您写入视图的完整路径。

类似这样的东西:

@Html.Partial("~/View/Shared/_GenericGreeting.cshtml")

我接受了teo的回答。他帮助了我,给了我这个问题的线索。但有一些重要的事情需要检查。

我不知道的一件事是,生成的cshtml文件具有名为PageVirtualPathAttribute的属性。有一个问题我不能得到正确的组合是因为我走错了路。

另一件需要注意的事情是这个类,它是在安装RazorGenerator时自动生成的,并且它在App_Start文件夹中。

public static class RazorGeneratorMvcStart {
        public static void Start() {
            var engine = new PrecompiledMvcEngine(typeof(RazorGeneratorMvcStart).Assembly) {
                UsePhysicalViewsIfNewer = HttpContext.Current.Request.IsLocal
            };
            ViewEngines.Engines.Insert(0, engine);
            // StartPage lookups are done by WebPages. 
            VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
        }
    }

但是,这一行有一个重载方法来定义编译视图的路径。我的共享项目是由其他人创建的,他把这条路放进去了。

var engine = new PrecompiledMvcEngine(typeof(RazorGeneratorMvcStart).Assembly, @"~/Areas/Cart/", null)

一旦我检查了这些部分,我只需要按照teo的建议,在我的视图中使用以下内容。

@Html.Partial("~/Areas/Cart/Views/Home/_GenericGreeting.cshtml")