Переопределить представление на сайте ASP.NET MVC не работает

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

Допустим, B - это базовый контроллер с неабстрактным методом действия SomeAction, который возвращает View ("_ MyView"). _MyView.cshtml компилируется с использованием RazorGenerator.

Допустим, контроллер A наследует B, но не переопределяет SomeAction.

Я попытался сделать другое представление "~/Views/A/_MyView.cshtml", чтобы переопределить стандартное, но это не работает. Мой вопрос: как я могу это сделать?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

1) Я знаю, что представления по умолчанию ищутся в том порядке в тех путях

"~/Views/{1}/{0}.cshtml",
"~/Views/{1}/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared/{0}.vbhtml"

2) Помещение "~/Views/Shared/_MyView.cshtml" переопределяет представление, но не только для контроллера A, но и для любого другого контроллера, который наследует B

3) Переопределение SomeAction для возврата base.SomeAction() не работает

ОБНОВИТЬ

Я нашел подобный вопрос здесь, но, делая предложение, ничего не случилось RazorGenerator Проблемы

Я разместил свою собственную проблему здесь

Заранее спасибо!

2 ответа

Решение

Пока что мой единственный обходной путь - это установить RazorGenerator в потребительском приложении, а также установить представление _MyView.cshtml как RazorGenerated. RazorGenator затем выбирает правильный вид.

Еще одно замечание для других посетителей - не смешивать неверную точку зрения с маршрутом, идущим к базовому контроллеру, а не к контроллеру потребителя. При решении этой проблемы ранее до возможности выяснить фактическое неправильное представление обслуживал правильный контроллер в качестве OP, и у меня есть проблема с. У меня есть код в моей базе application_start, который удаляет дубликаты маршрута.

Любому другому, решающему эту проблему, необходимо обновить RazorGeneratorMvcStart.cs, чтобы установить PreemptPhysicalFiles = false в главном проекте. По умолчанию это не так, и представления в главном проекте имеют приоритет:

        var engine = new PrecompiledMvcEngine(typeof(RazorGeneratorMvcStart).Assembly)
        {
            UsePhysicalViewsIfNewer = HttpContext.Current.Request.IsLocal,
            PreemptPhysicalFiles = false
        };

        ViewEngines.Engines.Add(engine);

Этот файл является App_Start\RazorGeneratorMvcStart.cs. Также важно добавить двигатель, а не вставить его. По умолчанию вставка в позиции 0.

Примечание: я сталкиваюсь с этой проблемой при обновлении пакетов NuGet, кажется, что файл перезаписывается, возвращаясь к поведению по умолчанию.

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