Можем ли мы использовать несколько форм на веб-странице?
До сих пор на всех веб-страницах, которые я встречал, содержалось не более одного тега <form>
. Почему не несколько? Я не могу придумать причины, по которым несколько форм не могут сосуществовать на одной и той же веб-странице.
Кроме того, чтобы быть конкретным для ASP.NET - почему все элементы управления сервером помещаются в тег <form>
? Почему бы не разместить их где-нибудь еще?
Кроме того,
Я заметил, что в файле .aspx
тег <form>
имеет атрибут runat = server, в то время как обычный серверный элемент управления, такой как Button
, также имеет его. Таким образом, <form>
также является сервером. Но, как ни странно, я не могу найти его в Visual Studio Toolbox.
Ответы
Ответ 1
Может быть несколько форм, с hacks.
Это действительно недостаток WebForms. В ASP.NET MVC вы можете реализовать столько форм, сколько хотите (и это правильное и правильное поведение веб-страниц).
Причина, по которой все элементы управления сервером помещаются внутри тега <form>
, позволяет механизму WebForms распознавать их, загружать их значения и сохранять их значения из/в ViewState. Практически вся инфраструктура управления контролем в WebForms основана на идее, что тег содержит все, что вы получаете от кода.
Ответ 2
Как уже отмечалось, это один из недостатков WebForms. Я также хочу отметить, что межстраничная проводка и групп проверки, вы обычно можете достичь желаемого поведения (для большинства "многоформатных" решений).
Ответ 3
В отношении дополнительного вопроса: <form runat="server">
анализируется как HtmlForm
класс за кулисами, который наследует от HtmlControl
, как и любой другой элемент HTML с runat="server"
.
В отличие от любого другого HtmlControl, на нем может быть только один экземпляр на странице, и он не появляется в панели инструментов, поскольку он автоматически добавляется к каждой новой Форме, которую вы создаете, поэтому она совершенно бессмысленна.
Ответ 4
Да, это можно сделать - создав пользовательский объект HtmlForm и переместив формы по мере необходимости. Я просто ответил на аналогичный вопрос здесь (с кодом):
Руны формы Paypal Мой макет веб-форм ASP.NET → Как решить?
Ответ 5
много несерверных форм - вы можете, но только одна форма сервера runAt
Я также нашел это:
Тег формы на стороне сервера - это тег, который имеет атрибут runat = "server". Если этот атрибут
отсутствует, то это типичный тег HTML-формы. Вывод состоит в том, что вам разрешено использовать
несколько тегов формы на странице, если только один имеет атрибут runat = "server".
Недостаток формы, которая не имеет этого атрибута, заключается в том, что состояние представления не будет работать
(значения формы исчезают при использовании кнопок браузера назад/вперед). Это
небольшая цена для оплаты, если вам действительно нужны несколько форм на странице.
Ответ 6
- Возьмите мастер-страницу и настройте дизайн.
- Возьмите одну форму на главной странице.
- Взять вторую форму в держателе места.
- Вставить держателя места только для записи тега формы формы (не использовать)
- Добавить страницу aspx и создать вторую форму, но не писать тег формы только для элемента управления
- Возьмите пиктограмму кода события с нажатием кнопки
Это правильный способ для двух форм