【问题标题】:Textbox value not getting cleared文本框值未清除
【发布时间】:2011-09-08 22:21:37
【问题描述】:

在下面的代码中,单击按钮后文本框的值没有被清除。

默认.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 = ""; 以清除文本,但没有用。 请不要要求我将 Button 保留在 updatepanel 标记之外。我需要在不发回页面的情况下完成活动。

如果文本框在里面由于定时器触发了 20 秒,文本框太闪烁并且不允许编辑。简单地说TextBox令人耳目一新,甚至不允许添加任何文字。

我不想将此扩展到 JavaScript 和其他以清除文本框中的值。谁能告诉我如何使用 C# 清除文本框的值。

【问题讨论】:

    标签: asp.net ajax postback


    【解决方案1】:

    使用另一个更新面板并在Page_Load 函数中添加UpdatePanedid.Update(); 希望这对您有所帮助。

    【讨论】:

      【解决方案2】:

      textbox1 必须在&lt;/ContentTemplate&gt;&lt;/asp:UpdatePanel&gt;

      【讨论】:

      • 如果 TextBox 在 &lt;/ContentTemplate&gt;&lt;/asp:UpdatePanel&gt; 内,由于计时器触发时间为 20 fsecs,文本框过于闪烁且不允许编辑。简单地说TextBox令人耳目一新,甚至不允许添加任何文字。
      • 那么你需要想出另一个解决方案,是吗?没有计时器的第二个更新面板怎么样?
      【解决方案3】:

      在 UpdatePanel 内移动文本框。您的按钮只会触发 UpdatePanel 的内容被重新加载,而不是它之外的内容。

      【讨论】:

        【解决方案4】:

        您说您不想使用 Javascript 而您想使用 C#,但是如果您可以在 C# 中编写 Javascript 并在完成 UpdatePanel 的部分回发后在客户端上执行它会怎样?

        您可以将以下内容添加到您的 Button1_Click 方法中:

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

        上面的sn-p在部分回发后在客户端执行Javascript,并将TextBox1的值设置为空字符串。

        【讨论】:

          【解决方案5】:

          对我有用的是使用 chromes 并检查组合框元素以获取浏览器提供的 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

          是渲染过程中给出的唯一名称,我很确定名称不会改变

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-22
            • 1970-01-01
            • 2010-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多