2009-03-16 13 views
4

他のコントロールをラップするUpdatePanelを含むUserControlがあります。 UserControlは既にScriptManagerとScriptManagerを持たない他のページがあるページで使用されます。私はUserControlが存在しない場合、自動的に独自のScriptManagerを持って来るようにしたいと思います。UserControlのAJAX ScriptManager

私はScriptManager.GetCurrentを試してみましたが、nullを返した場合、自分自身のScriptManagerを作成してフォームに挿入しますが、このコードを実行するためにUserControlのライフサイクルで十分早期に場所を見つけることができません。私はエラー "IDを持つコントロール 'uPnlContentList'は、ページ上のScriptManagerを必要とします。ScriptManagerは、必要なコントロールの前に現れなければなりません。私はページをロードしようとするたびに。私のコードを実行しようとした場所は、OnInit、CreateChildControls、PageLoadであり、到達する前に死んでいるため呼び出されることはありません。

この小切手はどこに置く必要がありますか?

答えて

2

これは別の方向に来るのが嫌ですが、マスターページを使用していますか?もしそうなら、あなたはそれに1つのScriptManagerを置いてそれを使っていると考えましたか?

+0

いいえマスターページがありません....私を始めないでください:)私の手はその決定に縛られています。 – cjserio

+2

これはなぜ答えですか? – peroija

11

すべてのASPXファイルが参照するMasterManagerにScriptManagerを挿入します。それから、ScriptManagerで作業する必要のあるサイトのどこにいても、マスターページからScriptManagerを取得するScriptManagerProxyを使用して、ユーザーコントロールとコードの背後にあるScriptManagerProxyを使用できます。

ScriptManager.GetCurrent(Page)を呼び出すと、スクリプトマネージャへの参照が表示されます。ここで

<asp:ScriptManagerProxy> 
    <Scripts> 
    <asp:ScriptReference Path="~/Scripts/myscript.js" /> 
    <Scripts> 
</asp:ScriptManagerProxy> 

はリンクです:

MSDN Info

+1

申し訳ありませんが、私はmasterpageを持つことができません。それは既存のシステムであり、私たちはすべての既存のページを通過して変更することは許されません...そのため、私はユーザーコントロールにスマートを入れようとしています。 – cjserio

+0

〜/ Scripts/myscript.jsには〜が含まれていますか? –

0

私はInitイベントが動作するはずだと思います。 ScriptManager.GetCurrentが追加する前にnullを返すかどうかをチェックします。ただし、ScriptManagerを追加するときは、フォーム内の最初のコントロールとして追加してください。

これはテストしていませんが、うまくいくと思います。

+0

申し訳ありませんが、私が言ったように、Initイベントは、例外が以前にスローされたのでヒットしません... – cjserio

0

何「...の周りに私を得た<フォーム>

<asp:ScriptManager ID="scriptManager" runat="server"/> 

後、この行を含めた私のために働いたことはページ上のScriptManagerが必要です。のScriptManagerがそれを必要とする任意のコントロールの前に現れなければなりません。 "

0

私は2つのものを作っています。あなたはAutoPostBackのを持っている場合、あなたはまたにフォーカスを設定する必要があり、ユーザーコントロール上であなたScriptManagerCall

userControl.SetFocus() 

前にこれを呼び出して、calingサイトで

Public Sub SetFocus() 
    txtBox.Focus() 
End Sub 

:ユーザーコントロールで

このサブを作りますTextChangedイベント。

Protected Sub txtBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged 
    txtBox.Focus() 
    ...... 
End Sub 

希望します。

関連する問題