我可以使用javascript调用服务器端方法而不会导致回发吗?

时间:2011-11-03 20:24:29

标签: javascript asp.net

我有调用ASP.NET中的方法的JavaScript代码。基本上,我有SqlDataSourceGridView相关联,我想更改SelectCommand的{​​{1}}而不会导致回发。

现在,我正在使用DataSource方法,但正如我所说,我不希望页面重新加载。我只想更新__dopostback。这可能吗?

2 个答案:

答案 0 :(得分:6)

这不是怎么做的。有很多方法,但最简单的方法是将您的内容包含在UpdatePanel中并在页面上删除ScriptManager。

例如:

<asp:ScriptManager id="mymanager" runat="server" />

<asp:UpdatePanel id="mainPanel" runat="server">
<ContentTemplate>

<! -- Put your content here -->

</ContentTemplate>
</asp:UpdatePanel>

现在,您网页上的所有互动都将通过Ajax完成。

更好的方法(我目前使用的那个)

使用jQuery与Web服务一起进行Ajax调用。

示例代码:

[System.Web.Script.Services.ScriptService]
public class MyWebService: System.Web.Services.WebService
{
    [WebMethod]
    public List<BusinessObject> GetSomeData(int dataID)
    {
        //Invoke your business layer and get some data here
        List<BusinessObject> result = BusinessLayer.GetSomeData();
        return result;
    }
}

在客户端使用jQuery,你可以这样做:

$.ajax({
    type: "POST",
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    url: "MyWebService.svc/GetSomeData",
    data: {'dataId': you_id_here },
    success: function(result) {
        //result.d will contain an array of BusinessObject in JSON format
        //You can iterate through this list and populate your html using this data.
        //You can either use jQuery templates
        //or one of the many jQuery plugins for tabular data.
        //I use datatables:
        //http://datatables.net/
        for(int i=0;i<result.d.length; i++)
        {
            //do something here if you want to iterate one by one constructing your
            //html
        }
    },
    error: function(xhr, ajaxOptions, thrownError) {
           //display error here
        });
    }
});

我强烈建议您查看以下链接:

  1. http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/
  2. http://encosia.com/simplify-calling-asp-net-ajax-services-from-jquery/

答案 1 :(得分:0)

GridView放入asp:UpdatePanel。涉及网格的所有回发都将更改为回调,您的网格应该更新,而无需重新加载整个页面。