Как я могу определить, вызывается ли моя главная страница через Webforms или страницу MVC в моем проекте MVC?

#c# #asp.net-mvc #webforms #master-pages

#c# #asp.net-mvc #webforms #мастер-страницы

Вопрос:

Проект, над которым я работаю, был проектом, который изначально был WebForms, а затем перенесен на Asp.Net Страницы MVC. 3 все еще используют Webforms, и переписывать их не стоит усилий.

Чтобы избежать необходимости поддерживать две отдельные главные страницы, которые выглядят одинаково, у меня есть две главные страницы, MVC.Master и Webforms.Master . Webforms.Master имеет MVC.Master значение главной страницы, поэтому всякий раз, когда я добавляю новую ссылку на инструмент в свое меню, она всегда отображается, независимо от того, просматривает ли пользователь Webforms или страницу MVC. Webforms.Master На нем нет ничего, кроме менеджера сценариев AjaxToolkit.

До сих пор все работало нормально, теперь я добавляю поддержку Telerik. Проблема в том, что вы не можете использовать Html-помощники на страницах WebForm, поскольку вы получаете исключение A ViewMasterPage can be used only with content pages that derive from ViewPage or ViewPage<TModel>.

Поскольку меня не волнует, запускаются ли для страниц Webform скрипт Telerik и регистраторы таблиц стилей, я в идеале хотел бы сделать что-то вроде

 <% if (!PageIsWebforms) 
   {
       Html.Telerik().....
   }
%>
  

К сожалению, я не могу придумать хорошего способа успешно определить, является ли внутренняя страница страницей WebForms или нет. У кого-нибудь есть идеи, как я могу этого добиться?

Ответ №1:

Страницы MVC наследуют что-то другое, кроме System.Web.UI.Page, не могли бы вы протестировать Page is System.Web.MVC.ViewPage . Вы могли бы сделать это свойством, чтобы упростить разметку.

Комментарии:

1. Это сработало. Если страница является страницей MVC, то Page свойство наследуется от System.Web.MVC.ViewPage , поэтому проверка, если Page is System.Web.MVC.ViewPage , сообщает мне, является ли страница MVC или нет. Спасибо!

2. @KallDrexx, более прямым тестом было бы проверить Page is System.Web.MVC.ViewPage (обратите внимание,чтоэто не as ). Я отредактировал свой ответ, чтобы включить фактический тип страницы MVC.