У нас есть приложение MVC, которое вводит наш контент в HTML-оболочку, предоставленную клиентом.
Существует несколько оболочек, таких как fund.html, share.html, factsheet.html и home.html.
Обертка хранится на нашем веб-сервере. Нам нужно загрузить оболочку в Site.Master и внедрить наш контент в область содержимого обертки, а затем отобразить страницу.
В принципе, мне нужен совет о том, как определить, какую оболочку использовать.
Сначала я думал, что мы можем сопоставить обертку с контроллером. Таким образом, если мы рендерим представление на FundController, мы можем использовать оболочку Fund.html, а если это ShareController, мы можем использовать Share.html. В BaseController, который реализован как FundController, так и ShareController, я получал имя контроллера и использовал его для загрузки файла, и все было хорошо.
Но когда требования изменились, стало очевидно, что это не сработает, потому что иногда нам нужен контроллер для рендеринга разных представлений, которые используют разные оболочки. Таким образом, FundController, возможно, теперь придется отображать Fund.html и Factsheet.html. Теперь контроллер не сопоставляется напрямую с файлом-оболочкой.
Затем я подумал, что могу использовать имя действия вместо имени контроллера, чтобы определить оболочку, которую я должен использовать. Например, public ViewResult Fund()
будет соответствовать Fund.html, а public ViewResult Factsheet()
будет соответствовать Facthseet.html, но это не идеально, потому который срабатывает в BaseController, будет срабатывать для всех методов действий, которые я выполняю, включая те, которые возвращают PartialViews и другие результаты действий, для которых я не хочу загружать оболочки. Мне нужны только обертки для ViewResults.
Итак, в этом случае мне было интересно, как лучше всего определить, какую оболочку использовать, для какого ViewResult я выполняю. Один из вариантов использует «волшебную строку», которая всякий раз, когда выполняется данный метод действия, устанавливает свойство в BaseController, которое можно использовать для определения используемой оболочки ... но мне не нравятся волшебные строки. Я бы предпочел избегать хакерского подхода.
Я также думал об использовании фильтра действий, который мог бы выполнять работу по загрузке оболочки, связанной с любым методом действия, с которым связан фильтр. Но прежде чем сделать это, я хотел бы узнать мнение других людей, которым, возможно, приходилось сталкиваться с проблемой, подобной этой раньше. Или, если кто-нибудь может посоветовать лучший подход? Как мне лучше всего это сделать? Спасибо.