2

当 DropDownList 的数据已加载/绑定到控件上时,是否有我可以使用的客户端事件?发生这种情况时,我需要在他们这边触发事件。


基本上,我试图在加载数据时锁定控件,就好像用户可以开始输入数据并在输入时失去焦点一样减速(并不少见)。

我尝试在标签中执行此操作,但位于那里的方法似乎在第一次回发后停止工作!(任何帮助将不胜感激)。作为一种解决方法,我尝试将事件附加到元素本身,虽然这适用于锁定,但使用 onchange 事件,我无法在数据成功加载后解锁它!

有任何想法吗?感谢到目前为止的答案:)

4

4 回答 4

3

由于数据将绑定在服务器端,因此您没有针对该特定事件的客户端事件,但是,页面已呈现,数据将在那里,因此您可能希望在document.load 事件,或者使用类似 jQuery 的 document.ready 事件。一旦页面(包括您绑定的下拉菜单)完成加载,这将触发您的脚本运行。

于 2008-11-10T15:49:47.200 回答
1

Jason 在这里是正确的,因为当此类事件发生时,您无法“通知”客户。您可以做的一件事是调用 Page.RegisterStartupScript() 方法,以便在页面完成加载后使用 JavaScript 执行某些操作(并且假设已经发生了完成数据绑定的回发)。同样,这假设您想在数据绑定完成后在客户端执行某些操作,而不是服务器端。

于 2008-11-10T15:48:15.067 回答
1

你能在你的应用程序中使用 ASP.NET AJAX 吗?如果是这样,您可以让选定的事件打开一个模式对话框,您可以在填充下拉列表时在其中显示“处理”文本。这样用户就无法访问任何其他控件,您可以放心地做您需要的事情。

于 2008-11-13T15:13:55.457 回答
0

我在我的网站的母版页中使用以下代码。这会阻止用户在完全绑定之前尝试使用控件。我发现如果控件没有完全绑定(连接速度慢),那么页面就会爆炸。

本质上,如果该页面未完成,脚本会劫持回帖。允许用户在页面完成处理之前不做任何事情。我在一年前写了这篇文章,它非常方便。

  1. 首先将 onload body 标签设置为 setdopostback()

  2. 将此添加到正文中的脚本块中。

        var boolDoPostBack = false;
    
        if (__doPostBack)
        {
           // save a reference to the original __doPostBack
           var __oldDoPostBack = __doPostBack;
    
          //replace __doPostBack with another function
          __doPostBack = AlwaysFireBeforeFormSubmit;
        }
        function setdopostback()
        {
            boolDoPostBack = true;
        }
        function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument)
        {
            var x= document.readyState
    
            if (x != "complete")
            {
                if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded")
                { 
                    //do nothing with IE postback
                }
                else if (!boolDoPostBack)
                {
                    //do nothing with FireFox postback
                }
                else
                {
                    //alert('Allow Postback 1');
                    return __oldDoPostBack (eventTarget, eventArgument);
                }
            }
            else
            {
                //alert('Allow Postback 2');
                return __oldDoPostBack (eventTarget, eventArgument);
            }       
        }
    
于 2009-03-11T19:24:16.823 回答