Я подумал, что рассмотрю некоторые из моих нерешенных вопросов и посмотрим, смогу ли я закрыть некоторые из них.
Этот был интересным. Я прямо отказался верить, что вы можете иметь только одну форму на странице ASP.NET. Это для меня не имеет смысла. Я видел множество веб-страниц, которые имеют более одной формы на веб-странице, почему страница ASP.NET должна отличаться?
Итак, это заставило меня задуматься.
Зачем странице ASP.NET требуется элемент формы?
Страницы ASP.NET пытаются эмулировать среду WinForms, обеспечивая постоянство состояния через модель PostBack. Это обеспечивает элемент состояния для среды без гражданства. Чтобы сделать это, среда выполнения должна иметь возможность поддерживать это состояние в каждой «форме». Это делается путем публикации данных для себя. Важно отметить, что:
- В PostBack нет ничего особенного.
- Он использует форму HTTP и POST, как и любую другую форму, из любого другого стека.
- Просто потому, что похоже, что он может делать что-то особенное, нет, все, что происходит, это возвращение POST с некоторой информацией о том, что его вызвало, так что вы можете делать такие вещи, как обработка событий на стороне клиента, в коде на стороне сервера. .
Так почему только один?
Для меня это был вопрос на миллион фунтов (я британец). Я понимаю, что ASP.NET нуждается в этом, особенно если вы используете серверные элементы управления ASP.NET, но почему, черт возьми, я не могу создавать свои собственные дополнительные формы?
Итак, я подумал, прикрути это, просто сделай свою собственную форму!
И я сделал. Я добавил простую стандартную форму болота с действием отправки «#». Затем выполняется POST для текущей страницы с данными формы для данной формы в запросе.
Угадай что? Все работало нормально. Итак, я закончил с:
- Мастер-страница с HTML-формой в
- Эта форма отправляет сообщения обратно на текущую страницу (в основном это страница с использованием мастера).
- В коде Page_Load для мастера я затем добавил код, чтобы проверить запрос и посмотреть, какие данные были переданы в запросе. Если он содержит данные (скажем, скрытое поле), то я знаю, что сообщение было получено из формы на главной странице, если нет, то это, скорее, PostBack из содержимого, и его можно игнорировать.
- Затем я окружил теги контента тегами
<form runat="server" id="aspNetForm"...> </form>
. Это означало, что все контентные страницы автоматически имели форму для работы.
Это дало мне относительно простое, чистое решение моей проблемы. Моя форма входа в систему отлично работает в тандеме со всеми созданными формами контента, некоторые из которых являются сложными формами, другие используют множество серверных элементов управления и много PostBacks и т. Д.
Надеюсь, это поможет другим.