asp.net: разница между runat = "server" и серверными элементами управления - PullRequest
11 голосов
/ 18 мая 2009

Какая разница в функциональности между

<asp:Button id="button1" Text="Click me" runat="server" OnClick="submitEvent" />

и

<input type="button" id="button1" runat="server" value="Click me" />

Имеет ли вход с атрибутом runat = "server" другие или ограниченные свойства и методы?

Спасибо!

Ответы [ 6 ]

20 голосов
/ 18 мая 2009

Первый создает System.Web.UI.WebControls.Button, а второй создает System.Web.UI.HtmlControls.HtmlInputButton.

Оба являются серверными элементами управления, но элементы управления в пространстве имен WebControls обычно имеют немного больше функциональных возможностей, чем элементы управления в пространстве имен HtmlControls. Обычно они помещают некоторые данные в ViewState для отслеживания своего состояния, и у них есть события обратной передачи на стороне сервера.

Каждый элемент управления в пространстве имен HtmlControls точно соответствует элементу HTML, тогда как элементы управления в пространстве имен WebControls могут отображаться по-разному в зависимости от того, что может поддерживать браузер, запрашивающий страницу.

1 голос
/ 18 мая 2009

Кнопка, представленная <asp:Button runat="server".../>, будет преобразована в элемент управления веб-сервера с богатой моделью состояния и различными свойствами и методами, которые имеют более четкое представление в реальном мире, например Button.Text = "Click Me".

Кнопка, представленная <input type="button" runat="server"..../>, будет преобразована в серверный элемент управления html, представленный HtmlInputButton; с имеет ограниченные свойства, методы и события. Большинство свойств напоминают HTML-эквиваленты, такие как Button.Value = "Click Me".

Обратите внимание, что элементы на странице разметки предварительно обрабатываются / компилируются перед использованием и будут преобразованы в представление класса, где каждый элемент представлен элементом управления. Вы можете получить доступ к серверным элементам управления, которые идентифицированы тегом runat = "server" из кода ниже, поскольку они будут иметь правильно соответствующий серверный элемент управления (web / html), другой статический контент, включая тег <input type="button.../> без runat = «Сервер» будет представлен как LiteralControl.

0 голосов
/ 18 мая 2009

функциональность обоих элементов управления одинакова, с той разницей, что первый - это .net control, а второй - html-контроль, который можно сделать servercontrol с помощью

Runat = "сервер".

и первый богат эвантами и методами, а второй ....

0 голосов
/ 18 мая 2009

Первая строка - ASP.NET, вторая простая XHTML.

Первый анализируется и интерпретируется на стороне сервера, после чего генерируется HTML-код, который в значительной степени соответствует вашему второму примеру. Кнопка ASP.NET на самом деле не более чем легкая оболочка над функциональностью кнопки ввода HTML, и ее следует использовать везде, где вам нужно обработать событие Click на стороне сервера (или в общем случае любые события), и обычно путь, поскольку вы позволяете ASP.NET абстрагироваться от идеи кнопки на вашей странице для вас.

0 голосов
/ 18 мая 2009

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

0 голосов
/ 18 мая 2009

Ваш второй вариант, вероятно, даже не сработает. runat = "server" будет отображаться непосредственно в выводе HTML, где он не будет иметь функциональности и будет только нарушать проверку HTML.

input - это HTML-элемент, который имеет только свойства HTML и определенно не имеет каких-либо методов.

...