Почему у вас не может быть страницы с несколькими серверными тегами формы? - PullRequest
2 голосов
/ 05 декабря 2010

Интересно, почему asp.net не позволяет этого? Лоты страниц содержат более 1 формы, логин - формы регистрации, поиск - другие формы и т. Д ...

Итак, я предполагаю, что я могу связать одну форму с хорошими объектами op asp.net, а другую - с обычным html, и мне нужно обработать ответ от этих двух совершенно разными способами. Это верно?

Пожалуйста, объясните, что здесь происходит, и почему asp.net не позволяет это

Ответы [ 2 ]

5 голосов
/ 05 декабря 2010

Веб-формы ASP.NET опираются на одну серверную форму .

Вы можете добавить столько клиентских форм , сколько хотите (без атрибута runat="server").


Это связано с попыткой создать настольную модель разработки для веб-разработки.

См. эту статью в журнале MSDN по нескольким причинам:

Модель с одной формой является ключевым элементом для реализации функции поддержки состояния ASP.NET. Поскольку страница всегда публикуется сама, среда выполнения легко находит и восстанавливает состояние, сохраненное при последнем доступе. Хотя существуют и другие способы сохранения и восстановления состояния страницы, использование модели с одной формой является самым простым и эффективным из всех решений.

В общем, отказ от множества форм не является большой жертвой. Несколько форм иногда полезны, но, вероятно, не так часто, как вы думаете. Сценарий, в котором было бы полезно использовать несколько форм, - это когда вы реализуете функциональность на основе форм на большом количестве страниц - например, в диалогах поиска и входа. Я вернусь к этому позже в колонке. Однако, прежде чем идти дальше, необходимо рассмотреть класс HtmlForm.


Примечание:

ASP.NET-MVC не имеет такого ограничения - вы можете иметь столько форм, сколько захотите.

2 голосов
/ 05 декабря 2010

ASP.NET был создан с настольным мышлением. Другими словами, он был создан, чтобы предоставить разработчикам настольных компьютеров платформу, похожую на настольную, для создания веб-сайтов. Чтобы поддержать эту инициативу, разработчики ASP.NET решили, что вся страница должна быть обернута в одну большую форму, и эта форма будет единственной формой на странице, чтобы все элементы управления на странице имели общий корень, отправить данные на сервер.

Если бы было разрешено несколько runat="server" форм, то для этого потребовалось бы, чтобы разработчики ASP.NET узнали больше о HTML / HTTP, чем хотелось бы. Цель состояла в том, чтобы позволить людям использовать события нажатия кнопки и выбирать события изменения списка таким образом, чтобы это соответствовало модели WinForms. Не было никакого способа поддержать эту иллюзию, если разработчику нужно было знать, какая форма POSTing где.

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