1

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

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

    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 属性自上次回发后未更改,则 TextBox 服务器端控件的 Text_Changed 事件不会触发。因此,它作为触发回发的手段是不可靠的。

4

2 回答 2

1

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

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

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

不过,这里没有区分哪个TextBox或其他输入会在按 Enter 时导致提交。

于 2012-09-23T13:01:42.580 回答
0

如果您想在 Enter 键上提交文本框更改,您可以简单地使用<form>,该按钮将是一个提交按钮。默认情况下,它会在按下 Enter 时提交。

于 2012-09-23T12:54:37.167 回答