【问题标题】:ASP.NET: button event does not fire, as its being blocked by another event on dropdown occurs (uxFromDate_TextChanged)ASP.NET:按钮事件不会触发,因为它在下拉列表中被另一个事件阻止(uxFromDate_TextChanged)
【发布时间】:2011-05-14 10:36:41
【问题描述】:

我有一个按钮,它有一个点击事件,但它在第一次点击时没有触发。我怀疑这与我在下拉框控件中有关,所以当我单击按钮时,下拉框的事件发生(textChanged)但它忘记了单击事件:-)

当然,如果我第二次点击它就可以了。

或者,如果我先单击其他位置,以便发生 TextChange 事件,然后在第一次执行时单击 Button..

这是正常的吗?如果有的话,还有哪些解决方法?

基本上 TextChange 事件必须触发,但按钮单击事件也必须触发。

我所说的所有事件都是 ASP.NET 事件。

这是我正在使用的事件的一些示例 - 按钮和下拉菜单

uxGetData 是一个按钮,uxToDate 是一个下拉框

protected void uxGetData_Click(object sender, EventArgs e)
{

    BindGrid();
    RefreshBindings();

}

protected void uxToDate_TextChanged(object sender, EventArgs e)
{
    DateTime date;
    bool valid = DateTime.TryParse(uxToDate.Text, out date);

    if (valid)
    {
        MyDate myDate= _repository.GetBetweenDate(date);
        if (myDate!= null)
            uxToMyDate.SelectedValue = Convert.ToString(myDate.item);
    }
}

【问题讨论】:

    标签: c# asp.net events controls


    【解决方案1】:

    一种解决方法是取消下拉菜单的 AutoPostBack 并使用 AJAX 来更新其他下拉菜单。

    第二种方法是在下拉选择更改时禁用按钮,使用客户端脚本,因此用户将无法单击它 - 将防止混淆。

    想不出关于 ATM 的第三种方法,所以希望上述方法中的一种适合。 :)

    【讨论】:

    • 谢谢Shadow,问题是在下拉和按钮事件中我都需要做服务器端的事情,即数据库访问
    • @Martin 使用第一种方法可以实现这一点。让当前在 uxToDate_TextChanged 中的代码作为对 AJAX 请求的响应执行,它应该可以正常工作,让您也可以单击按钮。
    • HI Shadow,我已经在 J​​query 客户端设置了这两个项目 .. 1 是文本框的更改事件,另一个是单击按钮 .. 即 $('#myTextbox').bind( 'change', function() { AND 还有 $('#myButton').bind('click', function() { - 现在,如果我只是单击按钮,我会收到事件(我有一个警报),但是我在文本框中放了一些东西,然后单击按钮然后更改事件触发(我有一个警报)但点击事件没有触发(没有警报)。
    • @Martin - OK 找到了解决办法。使用计时器执行文本更改代码:$('#myTextbox').bind('change', function() { window.setTimeout(function() { ..your stuff here.. }, 200); }); 然后按钮单击将首先执行,然后文本更改。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多