Обмен мастером между MVC и WebForms - работа с <form> - PullRequest
10 голосов
/ 23 июня 2009

У нас большое унаследованное приложение, в котором мы хотим начать использовать MVC для новой функциональности.

Для этого мы добавили пользовательскую маршрутизацию, например:

routes.IgnoreRoute( "{*allaspx}", new { allaspx = @".*\.as[pmh]x(/.*)?" } );

И мы хотим поделиться главной страницей между старыми веб-формами и новыми страницами MVC.

Это кажется достаточно простым - изменил мастер для наследования от ViewMasterPage, и его можно использовать как мастер для страниц MVC.

Проблема в HTML <form>.

Главная страница имеет тег <form> в верхней части и 3 панели содержимого внутри, как это нравится WebForms. Элемент управления Page переопределяет форму мастера, указывая на страницу, и это выглядит жестко закодированным поведением.

Все три панели содержимого имеют элементы управления WebForms, поэтому тег уровня страницы <form> должен находиться вне их, чтобы охватить все три. Примерно так:

<form id="form1" runat="server">
    ...
    <asp:contentplaceholder id="content1" runat="server" />
    ...
    <asp:contentplaceholder id="content2" runat="server" />
    ... //etc
</form>

Однако для MVC мы хотим иметь формы внутри представлений, используя помощник Html.BeginForm. HTML не позволяет вам вкладывать формы. Для шаблона MVC необходимо, чтобы представления возвращались к другим действиям (например, представление «детали» может отправлять обратно к действию «изменить»).

Кто-нибудь знает хороший способ обойти это?

1 Ответ

8 голосов
/ 23 июня 2009

Мы разделяем главную страницу между веб-формами и MVC, у которых нет <form>. Вы можете создать промежуточную главную страницу для веб-форм, которая, в свою очередь, использует вашу корневую главную страницу, но добавляет <form>. Иерархическая структура главных страниц очень полезна для этих конструкций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...