Можно ли определить, существует ли конкретное имя представления в контроллере до его рендеринга?
У меня есть требование динамически определять имя представления для рендеринга. Если существует представление с таким именем, мне нужно отобразить это представление. Если нет представления по настраиваемому имени, мне нужно отобразить представление по умолчанию.
Я хотел бы сделать что-то похожее на следующий код в моем контроллере:
public ActionResult Index()
{
var name = SomeMethodToGetViewName();
// The 'ViewExists' method is what I've been unable to find.
if (ViewExists(name))
{
retun View(name);
}
else
{
return View();
}
}
asp.net-mvc
Эндрю Хэнсон
источник
источник
Ответы:
Для тех, кто ищет метод расширения копирования / вставки:
источник
Как насчет того, чтобы попробовать что-то вроде следующего, если вы используете только один движок просмотра:
источник
Вот еще один [не обязательно рекомендуемый] способ сделать это
источник
ControllerContext
как кFindView
потребностям методы.Если вы хотите повторно использовать это в нескольких действиях контроллера, основываясь на решении, предложенном Дейвом, вы можете определить результат пользовательского представления следующим образом:
Затем в вашем действии просто верните экземпляр вашего настраиваемого представления:
источник
Мои 2 цента.
источник
В asp.net core 2.x
ViewEngines
свойство больше не существует, поэтому мы должны использоватьICompositeViewEngine
службу. Это вариант принятого ответа с использованием инъекции зависимостей:Для любопытных: базовый интерфейс
IViewEngine
не зарегистрирован как сервис, поэтомуICompositeViewEngine
вместо этого мы должны внедрить . Однако этотFindView()
метод предоставляется,IViewEngine
поэтому переменная-член может использовать базовый интерфейс.источник
Вот как это сделать в Razor для Core 2.2 и т. Д. Обратите внимание, что это вызов «GetView», а не «Find View»)
источник