0

Web サービスを使用する Javascript 関数を使用しており、終了後にグリッド データソースを更新する必要があります。

このタスクを達成するために、RegisterClientScriptBlock を介して JavaScript 関数を呼び出し、次に UpdateGridDataSource メソッドを呼び出します。

しかし、デバッグ中に、最初に UpdateGridDataSource メソッドを呼び出すことがわかりました..次に、WebService でメソッドを呼び出します!

ASP.Net コード

System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "delete", "DrawPOI();", true);

UpdateDataSource(); 

JavaScriptコード

function DeletePOI(arg) {
      //Some Code  
        $.ajax({
            url: "JSBLL.asmx/DeletePOI",
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: "{id:'" + arg + "'}",
            success: function (msg) {
                alert(msg.d);
            },
            error: function (e) {
                alert('Error');
            }
        }); //some code
        return false;
    }

ウェブサービス :

[WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string DeletePOI(string ID)
        try
            {
                if (id == "")
                    throw new Exception();

                long ID = Convert.ToInt64(id);
                using (GuardEntities database = new GuardEntities())
                {
                    var poi = database.POIs.Where(x => x.ID == ID).FirstOrDefault();

                    database.POIs.DeleteObject(poi);
                    database.SaveChanges();
                }

                return "POI Deleted Successfully";
            }
            catch
            {
                return "Error Occured";
            }
}

問題は、UpdateDataSource() が DeletePOI(string ID) の前に呼び出されることです。

4

1 に答える 1

0

に登録された Javascript コードRegisterClientScriptBlock()は、クライアントのブラウザーで実行されます。ASP.NET コードはサーバー上で実行されます。

行に到達すると:

System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "delete", "DrawPOI();", true);

ページがクライアントにロードされたら、 を呼び出しますDrawPOI()。次に、すぐに次のコード行を実行します。

UpdateDataSource(); 

すべての ASP.NET コードの処理が完了すると、ページがクライアントに送信されます。基本的に、あなたがやろうとしていることはうまくいきません。サーバー側の ASP.NET コードの途中でクライアント側の Javascript を呼び出して、それが返されるのを待つことはできません。

できることは、サーバー側のコードから Web サービスを直接呼び出すことです。

于 2013-02-04T16:35:53.107 に答える