服务器端事件偶尔会触发

时间:2012-09-23 12:13:55

标签: c# asp.net

我有一个产品下拉列表,一个显示订购产品的网格视图和一个用于将所选产品从下拉列表添加到网格视图的按钮。

当有人点击“添加新产品”按钮时,我的服务器端点击处理程序仅触发一些时间,并且不会触发其他时间。可能是什么问题?

    private void AddNewProductToGridView()
    {
        if (lstProducts.SelectedIndex < 0) return;

        Response.Write("Selected Index: " + lstProducts.SelectedValue + 
            "<br />Selected Text: " + lstProducts.SelectedItem.Text + 
            "<br />Selected Value: " + lstProducts.SelectedValue);
    }

    protected void btnAddProduct_Click(object sender, EventArgs e)
    {
        AddNewProductToGridView();
    }

更新 好的,在我发布问题后,按钮的服务器端点击事件每次都正常启动。 :d

然而,还有另一个问题。我还有一个数量的文本框。我希望该按钮充当页面的默认按钮,即当用户输入数量并按下回车键时,必须调用相同的服务器端方法AddNewProductToGridView

因此,我将文本框的AutoPostBack属性设置为True,并为文本框的文本更改事件添加了事件处理程序,如下所示:

    protected void txtQuantity_TextChanged(object sender, EventArgs e)
    {
        AddNewProductToGridView();
    }

关于这一点我很肯定这个事件处理程序不会触发,除了我第一次启动应用程序。

稍后更新

我认为我找到了解决问题的方法并学到了新的东西。

TextBox服务器端控件的Text_Changed事件,顾名思义,如果TextBox的Text属性自上次回发后没有更改,则不会触发。因此,作为触发回发的手段是不可靠的。

2 个答案:

答案 0 :(得分:1)

  

我还有一个数量的文本框。我希望该按钮充当页面的默认按钮

只需指定<form>的默认按钮,使其成为此按钮,而不是最终提交表单的“最终”按钮(如果有):

<form defaultbutton="btnAddProduct">
  ...
</form>

这里没有歧视TextBox或其他输入会在命中输入时导致提交。

答案 1 :(得分:0)

如果要在Enter键上提交文本框更改,只需使用<form>,按钮就是提交按钮。默认情况下,按Enter键时将提交。

相关问题