Как избавиться от элемента формы по умолчанию с .aspx-страницы?

Как фанат веб-стандартов, я не люблю <form runat="server"> по умолчанию, который окружает все мои веб-страницы. Я видел много веб-страниц на основе ASP.NET, на которых их нет, поэтому кажется, что их можно удалить, не лишая каких-либо функций. Как?


person Arve Systad    schedule 09.02.2009    source источник


Ответы (4)


Там должен быть <form runat="server">, если вы хотите использовать элементы управления и прочее. В противном случае обратные передачи невозможны, равно как и состояние просмотра и все остальное, от чего зависит .NET.

Вы уверены, что видели то, что, как вам казалось, видели? Возможно, эти страницы содержали только статический контент? Или, возможно, это были пользовательские элементы управления? Или еще одна распространенная возможность - возможно, это была мастер-страница с <form runat="server">?

person Vilx-    schedule 09.02.2009
comment
Насколько я знаю, StackOverflow создан с помощью ASP.net, и я не вижу здесь никакого элемента формы, окружающего все внутри тела. - person Arve Systad; 10.02.2009
comment
StackOverflow использует ASP.NET MVC, который не использует серверные элементы управления или события обратной передачи. - person Misko; 10.02.2009
comment
Это ASP.NET MVC, а не веб-формы ASP.NET. - person Vilx-; 10.02.2009
comment
А, это все объясняет. Думаю, тогда мне придется взглянуть на MVC. Спасибо :-) - person Arve Systad; 10.02.2009

В сценариях, где нет тега <form runat="server">, вы, скорее всего, смотрите на сайт, созданный в ASP.NET MVC, как упомянул один из комментаторов. ASP.NET MVC не использует серверные элементы управления, Viewstate или другие функции, предоставляемые серверными формами, вместо этого использует модель, более близкую к HTML, с относительно простыми встроенными сценариями.

С положительной стороны, вы намного ближе к чистому HTML (на самом деле, вы, по сути, являетесь прямым HTML), поэтому проще выполнять операции Javascript, интегрировать пользовательские виджеты пользовательского интерфейса и т. д.

С другой (потенциально) отрицательной стороны, если вы вложили значительные средства в элементы управления и технологии ASP.NET WebForms, они обычно не совместимы с новой инфраструктурой MVC. Кроме того, с этим связана кривая обучения. (Я только сейчас вникаю в это.)

Дополнительные сведения об ASP.NET MVC см. на официальном сайте. Как уже упоминалось, SO построен на этой технологии.

person John Rudy    schedule 09.02.2009

Элемент формы необходим для правильной работы ASP.NET. Необходимо отправить пользовательский ввод обратно на веб-сервер.

Я предлагаю вам взглянуть на состояние просмотра ASP.NET, чтобы понять как это работает..

Единственный сценарий, в котором вы можете удалить этот элемент, — это использование чисто статического HTML внутри файла .aspx.

person driAn    schedule 09.02.2009

Если вам не нужно использовать преимущества веб-элементов управления, состояния просмотра и т. д., вы можете кодировать страницы ASP.NET со стандартными HTML-формами и по-прежнему получать значения, которые передаются обратно через объект запроса. Точно так же вы можете писать на страницу через объект Response (явно или используя формат <%= MyVar %>), так что ничто не помешает вам иметь динамический веб-сайт без <form runat="server">. По сути, вы получаете что-то вроде классического ASP с точки зрения взаимодействия со страницами/формами, но у вас есть полная платформа .NET и все обычные хорошие вещи C#/VB.NET в бэкэнде.

Очевидно, возникает вопрос, является ли это разумным подходом, поскольку вы теряете многие преимущества ASP.NET (хотя вы получаете определенный контроль над выводом, которого у вас нет с помощью веб-элементов управления). Если вы не хотите использовать <form runat="server">, тогда MVC будет лучшим вариантом. Единственная причина, по которой мы использовали модель веб-форм без <form runat="server">, заключается в переносе классических приложений ASP, когда мы хотели получить быстрый порт на ASP.NET, а затем пересмотреть код в более естественном стиле .NET.

Таким образом, с некоторыми ограничениями это вполне возможно, но не обязательно рекомендуется.

И, конечно же, это никак не влияет на соответствие веб-стандартам, поскольку атрибут runat="server" удаляется перед отправкой HTML в браузер — он появляется только в исходном коде.

person Simon Forrest    schedule 09.02.2009