ASP Button点击事件中无法获取HTML TextBox值的解决方法
解决ASP.NET后台获取HTML TextBox值的问题
哦,我明白你碰到的麻烦了——用普通HTML的<input>控件时,后台通过Request.Form["txtClass"]拿不到值,通常是这几个原因导致的,给你几个实用的解决办法:
方法1:把HTML控件转为服务器端控件(最推荐)
给你的<input>加上runat="server"属性,这样ASP.NET会把它当成服务器端控件来管理,后台直接通过ID就能访问它的值,不用绕弯子:
前端代码修改成:
<input type="text" id="txtClass" runat="server" value="ClassName"/> <asp:Button ID="btnSave" runat="server" Text="Button" OnClick="btnSave_Click" />
后台代码改成:
protected void btnSave_Click(object sender, EventArgs e) { string a = txtClass.Value; // 直接通过控件ID获取值 }
这种方式最省心,ASP.NET会自动处理控件的状态维护,不用操心表单提交的细节。
方法2:确保HTML控件在服务器端表单内
如果不想把控件转为服务器端的,那一定要保证你的<input>放在<form runat="server">标签里面——ASP.NET的表单提交只会包含这个服务器端form内的控件值,要是你的input在form外面,提交时根本不会把它的值发去后台。
确认页面结构是这样的:
<form runat="server"> <!-- 你的input和按钮要放在这里面 --> <input type="text" id="txtClass" value="ClassName"/> <asp:Button ID="btnSave" runat="server" Text="Button" OnClick="btnSave_Click" /> </form>
这时候后台用Request.Form["txtClass"]就能正常拿到值了。
方法3:使用Request.Params获取(兼容更多场景)
如果上面两种方法还是不行,可以试试用Request.Params["txtClass"],它会依次检查QueryString、Form、ServerVariables和Cookies,比单独用Request.Form覆盖的场景更多:
protected void btnSave_Click(object sender, EventArgs e) { string a = Request.Params["txtClass"]; }
另外还要注意:如果你的页面用了母版页或者用户控件,加了runat="server"的HTML控件ID会被ASP.NET自动重命名,但后台直接用你定义的控件ID访问就好,不用管客户端生成的最终ID。
内容的提问来源于stack exchange,提问作者Diwas Poudel
相关产品推荐
相关产品推荐

