【问题标题】:Button_Click without PostBack没有回发的按钮单击
【发布时间】:2011-09-08 21:12:50
【问题描述】:

在我下面的代码中,当单击按钮时,文本框值被添加到数据库中,并且在 DataBinder 中显示的值相同,正在重新加载页面。好吧,就像聊天脚本一样,我需要在没有回发的情况下完成整个过程。那么,如何在不重新加载页面的情况下将值从文本框传递到 DataBinder。即如何执行按钮单击以使其不回发。

protected void Page_Load(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);
            try
            {
                MyConnection.Open();
                OdbcCommand cmd = new OdbcCommand("Select message from table1", MyConnection);
                OdbcDataReader dr = cmd.ExecuteReader();
                ArrayList values = new ArrayList();
                while (dr.Read())
                {
                    if (!IsPostBack)
                    {
                    string ep = dr[0].ToString();
                    values.Add(new PositionData(ep));
                    Shout_Box.DataSource = values;
                    Shout_Box.DataBind();
                    }
                }
            }
            catch
            {
            }
    }
    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();
    }

【问题讨论】:

    标签: asp.net postback


    【解决方案1】:

    一种快速而肮脏的方法是使用更新面板。在您的最终用户看来,没有回发,您只需要对您的页面进行微小的更改。

    更多信息:Introduction to the UpdatePanel control (MSDN)

    【讨论】:

    • 好吧,但即使我使用更新面板。输入文本后我应该单击按钮是文本框吗?
    • 正确。实际上,更新面板执行回发,但它使用了一些技巧,看起来好像它是异步的。这意味着您可以像执行完整的回发一样进行编码,而 .net 框架会为您处理其余部分。只需将您的按钮放在 UpdatePanel 中,您就完成了。整个过程不到 5 分钟。
    • 艾莉森一切正常。但是当我将TextBox 放置在</ContentTemplate></asp:UpdatePanel> 内时,甚至TextBox 也会由于计时器而触发,我无法添加任何文本。如果我将TextBox 放在外面,我将无法清除它的值。我发布了单独的问题,请在此处阅读stackoverflow.com/q/7355210/903455
    【解决方案2】:

    简短地说:JavaScript、JQuery、AJAX

    您必须使用其中之一才能成功;因为 asp.net 页面上的任何按钮如果它在服务器上运行,将已经发送回发。

    UpdatePanel是一个AJAX组件,你可以使用它,让你的按钮不发送postBack(或者你不受影响)

    【讨论】:

    • 好吧,但即使我使用更新面板。输入文本后我应该单击按钮是文本框吗?
    猜你喜欢
    • 2018-11-18
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2023-04-02
    • 2017-03-26
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多