如何在asp.net mvc

时间:2015-08-10 13:22:09

标签: c# asp.net-mvc razor asp.net-mvc-partialview

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

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

_GenericGreeting.cshtml< - 在父项目中

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

当我运行项目时,我只会收到以下错误。

  

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

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

我试过this post但没有运气,但也许我没有正确添加。

2 个答案:

答案 0 :(得分:2)

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

这样的事情:

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

答案 1 :(得分:2)

我接受了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)

一旦我检查了这些位,我只需要像我所说的那样在我的视图中使用以下内容。

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