ASP.NET:在回发之前查找哪个元素有焦点?

时间:2012-12-19 16:42:44

标签: asp.net postback

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

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

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

如果您尝试抓取失去焦点的最后一个控件,其中AutoPostBack =“true”,我相信您可以从Request.Form.Get("__EVENTTARGET")获取此控件的名称。此表单变量包含调用回发的任何控件的ID(在大多数情况下,如果不是全部,则)。

答案 1 :(得分:0)

我有一个类似的情况,GridView带有任意数量的文本框,每个文本框都有AutoPostBack和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。