Динамический RazorViewEngine для связанных контроллеров, выделенных для частичных

Я работаю над тем, что должно быть второстепенным расширением RazorViewEngine, но у меня возникли сложности со второй частью моего подхода.

В основном у меня есть некоторые контроллеры, которые предназначены для некоторых частичных представлений, и я хотел бы иметь возможность размещать их в подкаталогах. Конечно, размещение моделей и контроллеров в подкаталогах достаточно просто, но представления также должны совпадать. Вот где это становится сложно.

Ниже вы увидите мой движок, и мне не хватает как узнать имя главного контроллера. Кажется, возможно, я должен быть в состоянии продлить ControllerContext каким-то образом?

в FileExists override, вы можете видеть, что я жестко запрограммирован в значение для тестирования, и это очень хорошо работает. Но я не просто хочу администрации. Пример отношения контроллера - у меня есть контроллер администрирования, который загружает несколько партиалов, каждый со своим выделенным контроллером, например, 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 ответов

Другие вопросы по тегам