为什么在firefox浏览器设置Page.IsPostback值为true的文本框中输入密钥?

时间:2009-11-07 15:20:37

标签: asp.net javascript firefox

我有一个aspx页面,它有一个文本框和一个提交按钮。在文本框中输入数据并点击按钮显示一个listview控件,显示从数据库中恢复的数据.Listvew具有排序,分页,编辑功能。 对于其中的每一个,在服务器端触发相应的方法...例如: lv_sorting lv_Edit等 如果用户在文本框中键入数据并按Enter键,则在IE浏览器中将Page.IsPostback返回为false,但在Firefox中返回true(任何想法, 为什么会这样?)。

当回发为真时,会调用相应的方法,即。 lv_sorting等 但是因为在Page_Load事件中,当回发为假时,我只是从数据库中提取数据,页面不会在firefox浏览器中显示任何数据。

当在firefox浏览器中按下回车键时,我需要在listview中显示数据。 我尝试使用DefaultButton =“submitBtnId”并在文本框中按下回车键时强行调用按钮点击,但没有运气。

感谢。

仅供参考,这是在文本框中按下回车键时调用的javascript代码:

 function clickButton(e, buttonid) {
            var bt = document.getElementById(buttonid);
            if (typeof bt == 'object') {
                if (navigator.appName.indexOf("Netscape") > (-1)) {
                    if (e.keyCode == 13) {
                        if (bt && typeof (bt.click) == 'undefined') {
                            bt.click = addClickFunction1(bt)
                        }
                    }
                }
                if (navigator.appName.indexOf("Microsoft Internet Explorer") > (-1)) {

                    if (event.keyCode == 13) {
                        bt.click();
                        return false;
                    }
                }
            }
        }



        function addClickFunction1(bt) {
            var result = true;
            if (bt.onclick) result = bt.onclick();
            if (typeof (result) == 'undefined' || result) {
                eval(bt.href);
            }
        }

3 个答案:

答案 0 :(得分:1)

您是否有任何试图处理回车键的Javascript代码?

当表单字段具有焦点时按Enter键时的默认行为是激活表单中的第一个按钮。这会将表单发布到服务器,自然会导致IsPostBack为真。

我不知道为什么IE在这种情况下不这样做,这就是为什么我想知道你是否有任何可能改变行为的Javascript。

当您第一次到达页面时,IsPostBack属性仅为false,例如,当您单击其他页面(或甚至同一页面)上的链接时,或使用来自其他页面的Response.Redirect(甚至相同)页)。当页面上的表单回发到服务器时,IsPostBack属性为true。

除非您确保始终发出GET请求(例如通过在浏览器中设置window.location.href)来更新页面,否则您不能依赖IsPostBack来告诉您何时需要加载数据。

列表视图使用ViewState的方式是,您可以使用一次数据加载它,并通过回发保留该数据。如果更改基础数据并希望在列表视图中显示该更改,则必须从中删除当前数据并使用新数据加载它。或者,为列表视图打开EnableViewState,并为每个回发加载新数据。

答案 1 :(得分:1)

按下Enter键时,Internet Explorer不提交按钮;其他浏览器呢。这意味着按钮的单击事件在这些情况下不会触发。值得庆幸的是,它是ASP.NET 2.0中的possible to set a default button

一旦所有浏览器始终单击该按钮,您应该在按钮的单击事件触发时从数据库加载值,而不是在页面加载时加载。

答案 2 :(得分:0)

为什么不使用asp.net按钮控件,为点击添加一个事件处理程序,然后从事件处理程序填充Listview?

相关问题