Во время отладки моего решения Visual Studio 2010 MVC2 я заметил то, чего не ожидал, и которое показалось мне неэффективным. Когда я просматривал домашнюю страницу, IntelliTrace показывал, что при исключении частичного просмотра возникало и возникало много исключений.
У меня есть код, который вызывает частичное представление следующим образом:
<% Html.RenderPartial("FiltersAvailablePartialView", Model.AvailableFilters); %>
Структура представлений в проекте соответствует типичному приложению MVC. Существует папка Views, которая содержит две папки: Home и Shared. В домашней папке у меня есть страница .aspx, которая используется в качестве моей главной страницы просмотра, а в общей папке у меня есть страница .ascx, которая используется как частичное представление, как показано ниже (с другими видами и частичными представлениями нет в списке). для простоты):
Просмотры
-> Главная
-> Home.aspx
-> Общий
-> FiltersAvailablePartialView.ascx
Когда я загружаю страницу, я вижу в IntelliTrace, что эти исключения генерируются и перехватываются:
Брошено: "Файл '/MyApp/Views/Home/FiltersAvailablePartialView.aspx' не существует."
Поймано: «Файл '/MyApp/Views/Home/FiltersAvailablePartialView.aspx' не существует."
Брошено: "Файл '/MyApp/Views/Home/FiltersAvailablePartialView.ascx' не существует."
Поймано: «Файл '/MyApp/Views/Home/FiltersAvailablePartialView.ascx' не существует."
Брошено: "Файл '/MyApp/Views/Shared/FiltersAvailablePartialView.aspx' не существует".
Поймано: «Файл '/MyApp/Views/Shared/FiltersAvailablePartialView.aspx' не существует."
Таким образом, похоже, что .Net Framework использует дорогие методы try / catch для разрешения представления - сначала ищет представление .aspx в папке Home, затем - представление .ascx в папке Home, затем для представление .aspx в общей папке, а затем представление .ascx в общей папке. Таким образом, хотя он в конечном итоге находит частичное представление и страница отображается без каких-либо ошибок, это выглядит как дорогой способ (перехват исключений) найти представление.
Есть ли что-то встроенное в инфраструктуру MVC2, которую я мог / должен сделать, чтобы он разрешил эту частичную ссылку на представление с первой попытки и избежал этих дорогостоящих вызовов try / catch, которые происходят?