动态RazorViewEngine用于关联专用于部分的控制器

时间:2013-11-20 13:05:31

标签: c# asp.net-mvc asp.net-mvc-4 razor viewengine

我正在研究什么应该是一个小的RazorViewEngine扩展,但在我的方法的第二部分有一些困难。

基本上我有一些专用于某些部分视图的控制器,并希望能够将它们放在子目录中。当然,将模型和控制器放在子目录中很容易,但视图也需要匹配。这就是它变得棘手的地方。

下面你会看到我的引擎,我缺少的是如何获取主控制器的名称。似乎我应该能够以某种方式扩展ControllerContext

FileExists覆盖中,您可以看到我在一个值中进行了硬编码以进行测试,这样做很有效。但我不只是想要管理。控制器关系的一个例子 - 我有一个管理控制器,它加载一些部分,每个部分都有自己的专用控制器,例如User。因此,当我为用户加载视图时,我希望它转到Views/Administration/User而不是Views/User

public class PartialsViewEngine : RazorViewEngine
{
    private static string[] NewPartialViewFormats = new[] { 
    "~/Views/%1/{1}/{0}.cshtml",
    "~/Views/{1}/Partials/{0}.cshtml",
    "~/Views/Shared/Partials/{0}.cshtml"
    };

    public PartialsViewEngine()
    {
        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
    }

    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
    {
        string firstController = '????. //Trying to figure how to get this

        var path = partialPath.Replace("%1", firstcontroller);
        return base.CreatePartialView(controllerContext, path));
    }

    protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
    {

        var path = partialPath.Replace("%1", "Administration");
        return base.FileExists(controllerContext, path);

    }
}

如果控制器的开销最小,我将如何获得该值?

--- 更新1 ---

我注意到,使用此配置时,resharper即使执行也无法识别文件路径。

0 个答案:

没有答案
相关问题