<p>I like HtmlControls because there is no HTML magic going on... the asp source looks similar to what the client sees. </p>

<p>I can't argue with the utility of GridView, Repeater, CheckBoxLists, etc, so I use them when I need that functionality. </p>

<p>Also, it looks weird to have code that mixes and matches:</p>

<pre><code>&lt;asp:Button id='btnOK' runat='server' Text='OK' /&gt;
&lt;input id='btnCancel' runat='server' type='button' value='Cancel' /&gt;
</code></pre>

<p>(The above case in the event you wanted to bind a server-side event listener to OK but Cancel just runs a javascript that hides the current div)</p>

<p>Is there some definitive style guide out there? Should HtmlControls just be avoided? </p>

[{'answer_id': 57961, 'author': 'Darren Kopp', 'author_id': 77, 'author_profile': 'https://Stackoverflow.com/users/77', 'pm_score': 1, 'selected': False, 'text': "<p>well... i wouldn't use an html control if you don't need to do anything on it on the server. i would do</p>\n\n<pre><code>&lt;input id='btnCancel' type='button' value='Cancel' /&gt;\n</code></pre>\n\n<p>fin.</p>\n"}, {'answer_id': 57972, 'author': 'TheSmurf', 'author_id': 1975282, 'author_profile': 'https://Stackoverflow.com/users/1975282', 'pm_score': 2, 'selected': False, 'text': '<p>In my experience, there\'s very little difference. As Darren said, if you don\'t need server-side functionality, HTML controls are probably lower-impact.</p>\n\n<p>And don\'t forget, you can bolt server-side functionality onto almost any HTML control just by adding a runat="server" directive and an ID to it.</p>\n'}, {'answer_id': 57986, 'author': 'Tyler', 'author_id': 5642, 'author_profile': 'https://Stackoverflow.com/users/5642', 'pm_score': 4, 'selected': True, 'text': '<p>It might be useful to think of HTML controls as an option when you want more control over the mark up that ends up getting emitted by your page. More control in the sense that you want EVERY browser to see exactly the same markup.</p>\n\n<p>If you create System.Web.UI.HtmlControls like:</p>\n\n<pre><code>&lt;input id=\'btnCancel\' runat=\'server\' type=\'button\' value=\'Cancel\' /&gt;\n</code></pre>\n\n<p>Then you know what kind of code is going to be emitted. Even though most of the time:</p>\n\n<pre><code>&lt;asp:Button id=\'btnCancel\' runat=\'server\' Text=\'Cancel\' /&gt;\n</code></pre>\n\n<p>will end up being the same markup. The same markup is not always emitted for all WebControls. Many WebControls have built in adaptive rendering that will render different HTML based on the browser user agent. As an example a DataGrid will look quite different in a mobile browser than it will in a desktop browser.</p>\n\n<p>Using WebControls as opposed to HtmlControls also lets you take advantage of <a href="http://msdn.microsoft.com/en-us/library/67276kc5.aspx" rel="noreferrer">ASP.NET v2.0 ControlAdapters</a> which I believe only works with WebControls, this will allow you programatic config driven control over the markup that gets emitted.</p>\n\n<p>This might seem more valuable when you consider that certain mobile browsers or WebTVs are going to want WML or completely different sets of markups.</p>\n'}, {'answer_id': 21155715, 'author': 'Jai', 'author_id': 3070147, 'author_profile': 'https://Stackoverflow.com/users/3070147', 'pm_score': 0, 'selected': False, 'text': '<p>By adding runat="server" you can get access to any HTML controls in server side..\nand I believe HTML controls are less weight compared to ASP.NET server controls..</p>\n'}]
['https://Stackoverflow.com/questions/57958', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/4435/']