3

非同期ポストバック中にに新しいServiceReferenceインスタンスを追加して、後でクライアント側のスクリプトを介して参照されたWebサービスを使用できるようにすることは可能ですか?ScriptManagerPage

の中にあるaの中でこれを実行しようとしているので、プログラムでUserControlScriptReferenceRepeaterを追加してPage_Loadもここでは機能しません。

編集2:これは私が私から呼び出したコードであり、UserControl私が期待することをしません(非同期ポストバック中にScriptManagerにServiceReferenceを追加します):

private void RegisterWebservice(Type webserviceType)
{
    var scm = ScriptManager.GetCurrent(Page);
    if (scm == null)
        throw new InvalidOperationException("ScriptManager needed on the Page!");

    scm.Services.Add(new ServiceReference("~/" + webserviceType.Name + ".asmx"));
}

私の目標は、UserControlが周囲のアプリケーションにできるだけ邪魔にならないようにすることです。そうしないと、を含むServiceReferenceのを静的に定義する必要がありますが、これは私が望むものではありません。ScriptManagerProxyPage

編集:

私がこの記事を書いたとき、私は疲れていたに違いありません...私は書かServiceReferenceないつもりだったのでScriptReference。それに応じて上記のテキストを更新しました。

今私が持っています:

<asp:ScriptManagerProxy runat="server" ID="scmProxy">
    <Services>
        <asp:ServiceReference Path="~/UsefulnessWebService.asmx" />
    </Services>
</asp:ScriptManagerProxy>

しかし、CodeBehindにWebサービスを登録したいと思います。

4

2 に答える 2

2

このようなものを試してみてください...

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
{
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "script1", "~/js/myjs.js");
}
于 2009-12-22T05:28:45.147 に答える
1

編集:

問題を確認した後、これが機能しない理由は次のとおりです。ServiceReference を ScriptManager > Services セクションに手動でページに追加する場合。1 つのクライアント スクリプト インクルード ディレクティブを追加します。

例えば:

<script src="TestService.asmx/jsdebug" type="text/javascript"></script>

また

<script src="TestService.asmx/js" type="text/javascript"></script>

Frontend.Web.YourScriptMethodsへのアクセシビリティを提供します。

非同期ポストバックで ServiceReference を追加すると、このクライアント スクリプト inclue は追加されませんしたがって、クライアントスクリプトエラーが発生します-メソッドは未定義です。

しかし、これに対する回避策を見つけました。(それが正しい方法かどうかはわかりません)

    if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "testservice", "TestService.asmx/js");
    }

プロジェクト/Web サービスに応じて、"TestService.asmx" パスを置き換えることができます。

このようにして、あなたが望むものを達成することができます。

お役に立てれば、

クルナル・メバダ


古い答え:

以下を使用します。

    if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
    {
        ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("~/Service.asmx"));
    }
于 2009-12-24T05:24:24.993 に答える