2012-03-09 14 views
3

以下のコードは、ポストバック(非同期または非同期) ) - Ajax Control Toolkit(4.1.51116)にある新しいHtmlEditorExtenderコントロール。HtmlEditorExtender Ajaxコントロール - ポストバック(非同期または非同期)スチールフォーカス - ページがスクロール位置を保持しません

問題:ページの上部にあるリンクをクリックする

は、ダウン下にすべての方法をスクロールし、フォーカスを盗むために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をタグとして追加する必要がありますが、評判を持っていない:)

+0

これは単なるgueassですが、問題がありますあなたが焦点を絞っているわけではなく、完全なポストバックが起こっているというわけではありません。 –

答えて

2

オーバーライドフォーカスラインを削除して、あなたのページにフォーカスを盗んで機能を

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

+0

はい、このトリックでした!面白いことに、私はグーグルでそのページを見ましたが、自分の状況に適用されたとは思っていませんでした。だから、私がしたことは、スクリプトのページをページの一番下に置いて、ポストバックがうまくいっていることです!わーい –

0

あなたはPageディレクティブにMaintainScrollPositionOnPostbackを追加しようとしたことがありますか?

+0

はい、試しましたが、MaintainScrollPositionOnPostbackは効果がありません。 –

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.ポストバックの前にフォーカスが盗まれ、ポストバックが戻った後に取り戻されるので、エディタのコントロールが現在のフォーカスから遠い場合、画面が1つず​​つジャンプして再び戻ってくるので、醜いように見えます。しかし、あなたのページの高さが比較的小さい場合、あなたのニーズに合うかもしれません。ここから

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(); 
}; 
} 

+0

ありがとうhofnarwillie、あなたのソリューションはちょっとした作品です。これはページを上に移動させ、最後の位置には移動させませんが、スクロール位置を保存して再度復元することができます。もっと良い解決策を持っている人がいるかどうかを知りたいので、私はこれを未回答のままにしておきます。 –

関連する問題