asp.net:разница между runat=“server” и серверными элементами управления
-
22-08-2019 - |
Вопрос
В чем разница в функциональности между
<asp:Button id="button1" Text="Click me" runat="server" OnClick="submitEvent" />
и
<input type="button" id="button1" runat="server" value="Click me" />
Имеет ли ввод с атрибутом runat="server" другие или ограниченные свойства и методы?
Спасибо!
Решение
Первый из них создает System.Web.UI.WebControls.Button
в то время как второй создает System.Web.UI.HtmlControls.HtmlInputButton
.
Оба являются серверными элементами управления, но элементы управления в WebControls
пространство имен обычно обладает немного большей функциональностью, чем элементы управления в HtmlControls
пространство имен.Обычно они помещают некоторые данные в ViewState
чтобы отслеживать их состояние, и у них есть события обратной передачи на стороне сервера.
Каждый элемент управления в HtmlControls
пространство имен в точности соответствует HTML-элементу, в то время как элементы управления в WebControls
пространство имен может отображаться по-разному в зависимости от того, что может поддерживать браузер, запрашивающий страницу.
Другие советы
Кнопка, представленная <asp:Button runat="server".../>
будет преобразован в элемент управления веб-сервера с расширенной моделью состояния и различными свойствами и методами, который имеет более четкое представление в реальном мире, например, Button.Text = "Нажмите на меня".
Кнопка, представленная <input type="button" runat="server"..../>
будет преобразован в html серверный элемент управления, представленный HtmlInputButton;with имеет ограниченные свойства, методы и события.Большинство свойств напоминают html-эквиваленты типа Button.Значение="Щелкните меня".
Обратите внимание, что элементы на странице разметки предварительно обрабатываются / компилируются перед использованием и будут преобразованы в представление класса, где каждый элемент представлен элементом управления.Вы можете получить доступ к элементам управления на стороне сервера, которые идентифицируются тегом runat ="server" из исходного кода, поскольку они будут иметь соответствующий серверный элемент управления (web / html), другой статический контент, включая <input type="button.../>
тег без runat="server" будет представлен в виде LiteralControl.
Первая строка - это ASP.NET, последняя - простой XHTML.
Первый анализируется и интерпретируется на стороне сервера, после чего генерируется HTML-код, который в значительной степени соответствует вашему второму примеру.ASP.NET Кнопка на самом деле немного больше, чем легкая оболочка для функциональности кнопки ввода HTML, и ее следует использовать везде, где вам нужно обрабатывать Click
событие на стороне сервера (или, в общем случае, любые события), и обычно это правильный путь, поскольку вы позволяете ASP.NET абстрагировать идею кнопки на вашей странице для вас.
функциональность обоих элементов управления одинакова с той разницей, что первый - это элемент управления .net, а второй - элемент управления html, который можно сделать servercontrol с помощью
runat="сервер".
и первый из них богат событиями и методами, чем второй....
С таким элементом управления не связано никаких серверных событий, но вы можете использовать его в codebehind для изменения его свойств.
Ваш второй вариант, вероятно, даже не сработает.runat="server" будет отображаться непосредственно в выводе HTML, где он не будет иметь никакой функциональности и только нарушит проверку HTML.
input - это HTML-элемент, который имеет только HTML-свойства и определенно не содержит каких-либо методов.