2012-09-24 45 views
1

我有這樣的代碼在我的默認aspx文件:發現控制和html標籤

<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」)迴歸空值!!!因爲我用<input>,我怎麼處理這個控制?

+0

讓它成爲一個文本框? – IrishChieftain

+0

如果使用JS創建文本框,就會發生這種情況! – Moslem7026

回答

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(); 
+0

以及如果我的控件不存在於網絡表單中會發生什麼情況,並且會在加載頁面時動態生成,這在'this.'中是沒有的! – Moslem7026

+0

如果你的''是通過JavaScript動態添加的,那麼它將永遠不會通過FindControl找到,因爲它只能在PageLoad之前呈現的控件中使用。要找到這些控件,您需要查看Request.Form對象,因爲這些值將被髮布到頁面。例如'string theVal = Request.Form [「txt」]。ToString();' –

+0

好,thx提前。但是對於使用Request.Form [「txt」]'我使用了我的輸入框名稱,'id'因爲頁面 – Moslem7026

1

input type="text"不是TextBox。所以你應該把它投到HtmlInputText或使用TextBox來代替。

var txt = (HtmlInputText)row.FindControl("txt"); 

請注意,您需要添加using System.Web.UI.HtmlControls

0

MSDN:

Control.FindControl:方法在當前的命名容器 指定的服務器控件。

因爲不是服務器控制,所以找不到它!任何其他方式來處理不是服務器端的控件?

如果任何人想要獲取不在服務器上運行的文本框的文本,會發生什麼情況。