我的默认aspx文件中包含此代码:
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="holder1" runat="server">
<asp:Label ID="label1" runat="server" Text="Label">
</asp:Label>
<input type="text" ID="txt" runat="server"/>
<asp:TextBox ID="txt2" runat="server"></asp:TextBox>
<asp:Button Text="Ok" ID="btnOk" runat="server" onclick="btnOk_Click" />
</asp:PlaceHolder>
</div>
</form>
</body>
我背后的代码是:
TextBox tb1 = holder1.FindControl("txt") as TextBox;
Response.Write(tb1.Text);
TextBox tb2 = holder1.FindControl("txt2") as TextBox;
Response.Write(tb2.Text);
我的问题是在这里,findcontrol(“txt”)返回null值!因为我使用<input>
,我该如何处理这个控件?
答案 0 :(得分:4)
首先,您不需要holder1.FindControl
,因为您可以直接访问控件。
要获取input
控件,请使用代码;
HtmlInputText tb1 = this.txt;
Response.Write(tb1.Value);
您可能需要导入System.Web.UI.HtmlControls。
Using System.Web.UI.HtmlControls;
修改强>
要查找通过Javascript动态添加的控件,您需要使用Request
对象。
string theValue = Request.Form["txt"].ToString();
答案 1 :(得分:1)
input type="text"
不是TextBox
。因此,您应该将其转换为HtmlInputText
或使用TextBox
代替。
var txt = (HtmlInputText)row.FindControl("txt");
请注意,您需要添加using System.Web.UI.HtmlControls
,
答案 2 :(得分:0)
MSDN:
Control.FindControl :方法搜索当前命名容器 指定的服务器控件。
因为不是服务器控制它找不到它是不可能的!任何其他方式来处理非服务器端的控件?
如果有人想要获取未在服务器上运行的文本框文本,会发生什么。