【问题标题】:Why does hitting enter key in the textbox in firefox browser set Page.IsPostback value as true?为什么在Firefox浏览器的文本框中按Enter键将Page.IsPostback值设置为true?
【发布时间】:2009-11-07 15:20:36
【问题描述】:

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

当 postback 为 true 时,调用相应的方法,即。 lv_sorting 等 但是由于在 Page_Load 事件中,只有在 postback 为 false 时才从数据库中提取数据,所以页面在 firefox 浏览器中不显示任何数据。

当在 Firefox 浏览器中按下回车键时,我需要在列表视图中显示数据。 我尝试使用 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);
            }
        }

【问题讨论】:

  • 你在过去一个月里问了很多问题。如果您收到了有用的答案,请点击绿色复选标记接受。

标签: asp.net javascript firefox


【解决方案1】:

按下回车键时,Internet Explorer 不提交按钮;其他浏览器可以。这意味着按钮的单击事件在这些情况下不会触发。谢天谢地,它是 ASP.NET 2.0 中的 possible to set a default button

一旦所有浏览器都一致地点击按钮,您应该在按钮的 clicked 事件触发时从数据库中加载值,而不是在页面加载时。

【讨论】:

    【解决方案2】:

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

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

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

    IsPostBack 属性仅在您第一次到达该页面时为 false,例如,当您单击另一个页面(甚至是同一页面)上的链接,或者从另一个页面(甚至相同的页面)使用 Response.Redirect 时页)。当页面上的表单回传到服务器时,IsPostBack 属性为 true。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-06-17
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 2016-05-19
        相关资源
        最近更新 更多