HtmlEditorExtender Ajax控件 - 回发(异步与否)窃取焦点 - 页面不保持滚动位置

时间:2012-03-09 17:23:27

标签: asp.net asp.net-ajax postback ajaxcontroltoolkit

下面的代码有一个链接导致回发(异步或非异步),然后是div,其顶部填充为5000 :) - 以及在Ajax Control Toolkit(4.1.51116)中找到的新HtmlEditorExtender控件。

问题:

单击页面顶部的链接会导致HtmlEditorExtender窃取焦点,一直向下滚动到底部。

问题:

有谁知道这是否是一个已知错误? 谁能想到一个解决方案?

我甚至无法想到如何在页面上使用此控件以及任何其他导致回发的控件!

守则:

    <div>
        <asp:UpdatePanel runat="server">
            <ContentTemplate>
                <asp:LinkButton runat="server">test asynch postback - PLEASE DONT SCROLL DOWN!! :)</asp:LinkButton>
            </ContentTemplate>
        </asp:UpdatePanel>
        <br />
        <div style="padding-top: 5000px">
             Nooooooooooooooooooooooooo!!!!
            <asp:TextBox ID="txtPageBody" TextMode="MultiLine" Width="200px" runat="server" />
            <act:HtmlEditorExtender ID="htmlPageBody" runat="server" TargetControlID="txtPageBody" >
                <Toolbar>
                    <act:Bold />
                </Toolbar>
            </act:HtmlEditorExtender>
        </div>
    </div>

HtmlEditorExtender应该作为标记添加,但没有声誉:)

3 个答案:

答案 0 :(得分:2)

重写隐藏焦点在页面上的功能,删除了焦点线:

if (Sys.Extended && Sys.Extended.UI && Sys.Extended.UI.HtmlEditorExtenderBehavior && Sys.Extended.UI.HtmlEditorExtenderBehavior.prototype && Sys.Extended.UI.HtmlEditorExtenderBehavior.prototype._editableDiv_submit) {
Sys.Extended.UI.HtmlEditorExtenderBehavior.prototype._editableDiv_submit = function () {
//html encode
var char = 3;
var sel = null;

if (Sys.Browser.agent != Sys.Browser.Firefox) {
if (document.selection) {
sel = document.selection.createRange();
sel.moveStart('character', char);
sel.select();
}
else {
sel = window.getSelection();
sel.collapse(this._editableDiv.firstChild, char);
}
}

//Encode html tags
this._textbox._element.value = this._encodeHtml();
};
}

从这里开始:

http://ajaxcontroltoolkit.codeplex.com/workitem/27026

答案 1 :(得分:0)

您是否尝试将MaintainScrollPositionOnPostback添加到Page指令?

答案 2 :(得分:0)

不知道这是一个正确的解决方案,或者它首先发生的原因,但这是一个肮脏的解决方法。

<强> 1。添加此脚本

<script type="text/javascript" language="javascript">
    function pageLoad() {
        // if we did not redefined the '__doPostBack' method yet
        if (typeof window.__doPostBack_original == "undefined") {
            // save the original method
            window.__doPostBack_original = window.__doPostBack;
            // redefine it
            window.__doPostBack = function (eventTarget, eventArgument) {
                document.getElementById('<%=hdnLastFocus.ClientID %>').value = eventTarget;
                var retval = window.__doPostBack_original(eventTarget, eventArgument);
                return retval;
            };
        }

        window.onload = document.getElementById('<%=hdnLastFocus.ClientID %>').focus();
    }
</script>

<强> 2。删除UpdatePanel

第3。添加此隐藏字段

<asp:HiddenField ID="hdnLastFocus" runat="server" />

希望这有助于......:)

P.S。在回发之前焦点被盗,然后在回发返回后被收回,所以如果编辑器控件远离当前焦点,它看起来很难看,因为屏幕从一个跳到另一个然后再返回。但如果你的页面高度相对较小,它可以满足你的需求。