2

更新パネルでインラインスクリプトを使用する際の問題を回避しようとしています。この問題は、Sys.Application.add_load()を使用するか、ScriptManagerを使用してRegisterStatupScript()スクリプトを作成することで、一般的に解決できる問題です。ただし、この場合、どちらのソリューションも機能しません。

ここに問題があります。

asp.net(この場合はSharePoint)ページの更新パネル:

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:Button ID="Button1" runat="server" Text="Load" />
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>

背後のコードで、ボタンがクリックされたときにプレースホルダーにユーザーコントロールを追加するとします。

protected void Button1_Click(object sender, EventArgs e)
{
    MyControl ctrl = new MyControl();
    PlaceHolder1.Controls.Clear();
    PlaceHolder1.Controls.Add(ctrl);

    UpdatePanel1.Update();
}

最後に、ユーザーコントロールにいくつかのインラインスクリプトがあるとします。

<script type="text/javascript">
    var myInt = 1;
    alert(typeof myInt);
</script>

上記を組み合わせて実行すると、デフォルトで空の更新パネル(ボタンを除く)が表示されます。ボタンをクリックすると、上記のjavascriptのようなデータが追加されます。問題は、上記のjavascriptコードが起動しないことです。

私の実際のケースでは、ユーザーコントロールはそれほど複雑ではありません。コントロールが読み込まれるときに入力されるリピーターがあり、リピーターデータを少し変換するインラインJavaScriptがあります。データは通過しますが、JavaScriptは実行されず、エラーはスローされません。

解決策の試み:インラインjavascriptをinitMyCode()という関数でラップしてから、次を使用します。

ScriptManager.RegisterStartupScript(this, this.getType(), UniqueID, "initMyCode()", true);

...ユーザーコントロールページのロードイベント。initMyCode()がページ内に見つからないため、これは失敗します。

誰かがこの問題の実行可能な解決策を持っていますか?

4

2 に答える 2

1
if(!Page.ClientScript.IsStartupScriptRegistered("initMyCode")){ 
 string script =@"function initMyCode(){var myInt = 1;
   alert(typeof myInt);}
 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initMyCode);"
 ScriptManager.RegisterStartupScript(this, this.getType(), initMyCode, script, true);

}

または

<script type="text/javascript">
 function initMyCode(){
 var myInt = 1;
 alert(typeof myInt);}
 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initMyCode);
</script>
于 2012-11-29T07:20:41.493 に答える
-1

jQueryの「ready」にコードを追加しようとしましたか?

于 2012-12-01T00:07:01.067 に答える