1

我在页面上有一系列控件,包括一些用于记录员工时间表的文本框。当OnTextChanged触发时,页面回发并更新整体工作时间和分钟。

问题是,当用户单击保存按钮时,会发生回发,但这不是因为保存按钮的操作,而是因为 OnTextChanged 已触发。用户认为保存顺利,直到他/她再次访问该页面并且没有找到他/她的数据。几乎不可能向用户解释他们需要单击两次,因为第一次文本框失去焦点,第二次是正确的。

有没有办法存储在回发发生之前具有焦点的最后一个元素的值?我试图访问__LASTFOCUS的值,但我得到一个空字符串。

string lastFocus = Page.Request.Params.Get("__LASTFOCUS"); 

感谢您的帮助

4

2 回答 2

2

如果你试图抓住最后一个失去焦点的控件,它具有 AutoPostBack="true",我相信你可以从Request.Form.Get("__EVENTTARGET"). 此表单变量包含任何调用回发的控件的 ID(在大多数情况下,如果不是全部情况下)。

于 2012-12-19T18:38:34.977 回答
0

我对带有任意数量文本框的 GridView 也有类似的情况,每个文本框都有 AutoPostBack on 和 OnTextChanged 事件处理程序。我想要做的是能够从文本框中跳出,回发,然后将焦点恢复到在回发之前具有焦点的文本框,例如我切换到的文本框。

这就是我最终的结果:

function RestoreFocus(source, args) {
        var val = $("#<%=postbackFocusID.ClientID %>").attr("value");
        var el = document.getElementById(val);
        if (el != null)
            el.focus();
    }
    function PersistElementThatHasFocus(source, args) {
        $("#<%=postbackFocusID.ClientID %>").attr("value", document.activeElement.id);
    }
    function AddRequestHandler() {
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_endRequest(RestoreFocus);
        prm.add_beginRequest(PersistElementThatHasFocus);
    }

postbackFocusID 只是一个 asp:HiddenField。

于 2017-09-25T15:04:51.547 回答