2011-09-08 12 views
2

以下のコードでは、ボタンをクリックした後にテキストボックスの値がクリアされません。テキストボックスの値がクリアされない

Default.aspxの

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <br /> 
    <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="20"> 
    </asp:Timer> 
    <br /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <Triggers> 
       <asp:AsyncPostBackTrigger controlid="Timer1" eventname="Tick" /> 
      </Triggers> 
     <ContentTemplate> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <asp:Repeater ID="Shout_Box" runat="server"> 
      <ItemTemplate> 
       <%# DataBinder.Eval(Container.DataItem, "Message") %> 
      </ItemTemplate> 
     </asp:Repeater> 

     <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:TextBox ID="TextBox1" runat="server"> 
     </asp:TextBox> 
    </form> 
</body> 
</html> 

ボタンクリックのためのC#コード。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=repeater;" + "UID=root;" + "PASSWORD=********;" + "OPTION=3"; 
    OdbcConnection MyConnection = new OdbcConnection(MyConString); 
    OdbcCommand cmd = new OdbcCommand("INSERT INTO table1(message)VALUES(?)", MyConnection); 
    cmd.Parameters.Add("@email", OdbcType.VarChar, 255).Value = TextBox1.Text; 
    MyConnection.Open(); 
    cmd.ExecuteNonQuery(); 
    MyConnection.Close(); 
    TextBox1.Text = ""; 
} 

私は、テキストが、無使用をクリアするTextBox1.Text = "";上記のような行を追加してみました。 ボタンをupdatepanelタグの外に置いてはいけないと言ってください。ページをポストバックせずにイベントを実行する必要があります。

TextBoxが内部にある場合20fsecsのタイマートリガーのため、テキストボックスが点滅しすぎて編集できません。単純にTextBoxと言っても、少しでもテキストを追加することはできません。

これをJavaScriptなどに拡張して、テキストボックス内の値をクリアしたくないです。誰でも私にC#を使ってテキストボックスの値をクリアする方法を教えてもらえますか?

答えて

3

別のアップデートパネルを使用してPage_Loadの機能を追加してくださいUpdatePanedid.Update();これは役に立ちます。

1

UpdatePanelの中​​にテキストボックスを移動します。あなたのボタンはUpdatePanelの内容をトリガするだけで、UpdatePanelの内容は再読み込みされます。

TextBox1テキストボックスを使用すると、ボタンをクリックしたときにのみ、それはUpdatePanelの中​​に更新されます </ContentTemplate></asp:UpdatePanel>内であることが必要
2

+0

TextBoxが 'の内部にある場合、20fsecsのタイマートリガーのためにテキストボックスもあります点滅し、編集を許可しない。単純にTextBoxと言っても、少しでもテキストを追加することはできません。 – Mal

+0

次に、別の解決策を見つけ出す必要がありますか?タイマーを持たない2番目のアップデートパネルはどうですか? –

1

あなたはJavascriptを使用したくないと言うと、あなたは、C#が、何を使用したいあなたができればC#でJavascriptを記述し、UpdatePanelからの部分的なポストバックが完了した後にクライアント上で実行させますか?

はあなたのButton1 Clickメソッドに次を追加することができます。

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myScript", "document.getElementById('" + TextBox1.ClientID + "').value = '';", true); 

上記のスニペットは、部分的なポストバック後にクライアント上でJavascriptを実行し、空の文字列にTextBox1をの値を設定します。

1

何私のために働いたことはクロームを使用すると、HTML名のコンボボックスの要素を検査するために、ブラウザはそれを与え、このコードを使用していた。

ScriptManager.RegisterStartupScript(Me.Page、Me.Page.GetType()、 "のMyScript"、 "のdocument.getElementById( 'ctl00_m_g_8559e7aa_7fc2_4e23_b9b5_bf638f7e2699_ctl00_cboCustomers_TextBox').VALUE = '';"、TRUE)

ctl00_m_g_8559e7aa_7fc2_4e23_b9b5_bf638f7e2699_ctl00_cboCustomers_TextBox

はレンダリング中に与えられた一意の名前です。名前は変更されません。