对比<input type="text" id="">和<asp:TextBox runat="server" ID="">

首先这两个都是对应文本输入框形式:

<input type="text"class="form-control"id="txt_add_pro_help_username"value="aaa"/>

<asp:TextBox runat="server"CssClass="form-control"ID="txt_add_pro_help_username"/>

    1)这两个在形式上是一模一样的,原因在于使用相同的class样式修饰。

    2)js使用上也是一样的,虽然<asp:TextBox>是服务器控件,但是ID也是可以作为控件id在js上使用的。

  $("#txt_add_pro_help_username").val(result[2]);

  $("#txt_add_pro_help_userdept").val(result[3]);

         这两个一个是对应<input>形式的id,一个是对应<asp:TextBox>形式的id,结果都是一样的。

类型“TextBox”的控件“txtName”必须放在具有 runat=server 的窗体标记内。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

检查一下<form>是否正确,服务器端控件必须放在<form>内</form>

<form id="form1" runat="Server">
   <asp:TextBox id="txtName" runat="server">
   .....
   .....

</form>

<body>
<form runat="server" id="form1" method="post" action="test.aspx">
<div>
<input id="Text1" type="text" name="name1"/>
<input id="Submit1" type="submit" value="submit" />
<input id="Reset1" type="reset" value="reset" /></div>
</form>
</body>
以上代码点击按钮的时候不能转到test.aspx页面,删除runat="server"后就可以正常转到test.aspx页,而且能够正常显示,为什么啊?收起
既然说毫无意义,删除和不删除效果确不一样啊!
runat="server"如LS那位仁兄说的那样,既然有了runat="server"别再加action了,两个的提交方式都不一样,action将form数据给了test.aspx页面,而runat="server"直接回交服务器,
处理数据,又以数据加密后的hidden属性的input控件插入回去,实现表单的状态保存~如果test.aspx是另一个页面当然就有了你说的那种现象了

aspx运行时会被编译,其中没有runat server属性的html标签会被直接写入response,有runat server属性的html标签会转换成对应的HtmlControl子类加入到页面的控件集合中,按照一个控件的生命周期进行处理,这就是”运行在服务器上”的意思.一个最直接的表现就是,当你写一个id=”abc”的div,如果有runat server属性,在你的aspx.cs文件中直接可以使用abc.XXX来操作这个对象,而没有runat server的话,在cs中是没有这个对象的. 
以上说的是asp.NET中的html控件,asp控件只能runat server,因为他们不是直接和html对应的

原文地址:https://www.cnblogs.com/sjd1118/p/7233054.html