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 回答