2014-02-09 95 views
1

Ajax新手,這裏有一個問題。通過Ajax調用訪問ViewState變量靜態方法

Aspx頁面有一個網格視圖(允許排序)。網格下方是一個頁面號爲下拉列表。用戶可以選擇一個號碼進入該頁面。在初始頁面加載時,網格顯示記錄,列 - 'OrderId'按'desc'順序排序。 當前排序的順序和此列的名稱存儲爲ViewState變量。當任何列被排序時,這些變量都會被更新。

獲取數據的存儲過程接受columnName,SortOrder,PageNo。和頁面大小作爲參數。

此代碼工作正常。現在,我想通過Ajax調用來使用它。如果更改爲「公共靜態」,則無法訪問ViewState變量。

因此,請指導我如何在Ajax中使用此功能。 如果只有ColumnName & sortOrder應該作爲Ajax函數的參數發送,那麼該怎麼做。

private void BindOrders(int index) 
{ 
    int pageSize = 10; 

    SqlCommand cmd = new SqlCommand("GetOrderDetails", con);     
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@SortOrder", ViewState["vSortDirection"] 
           .ToString()); 
    cmd.Parameters.AddWithValue("@ColName", ViewState["vSortExpression"] 
           .ToString()); 
    cmd.Parameters.AddWithValue("@StartIndex", index); 
    cmd.Parameters.AddWithValue("@PageSize", pageSize); 
    cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4).Direction = 
        ParameterDirection.Output; 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    con.Open(); 
    da.Fill(dt); 
    con.Close(); 

    int rowcount = Convert.ToInt32(cmd.Parameters["@RecordCount"].Value); 

    if (rowcount > 0) 
    { 
    gvOrders.DataSource = dt; 
    gvOrders.DataBind(); 

    int n = (int)Math.Ceiling((decimal)rowcount/(decimal)pageSize); 
    ddlPage.Items.Clear(); 

    for (int i = 1; i <= n; i++) 
    { 
     ddlPage.Items.Add(new ListItem(i.ToString(), i.ToString()));       
    } 

    ddlPage.SelectedIndex = index - 1; 
    }    
} 

回答

0

如果您已經在ASP.NET中,有一個UpdatePanel,讓你做阿賈克斯。它會阻止整頁重新加載。

+0

我知道更新面板。但我想嘗試這種方式。另外,當使用updatepanel並進行Ajax調用時,它是相同的,我的意思是響應時間等? – Ruby

+1

排序,引擎蓋下Ajax仍然是Ajax。 ASP.NET只是增加了更多的解決方案。你可以破解你自己的,但我認爲這將是非常痛苦的,除了學習'UpdatePanel'如何工作以外,你從經驗中獲益不多。 – beautifulcoder

+0

感謝您的洞察力。你可以確認,我試圖達到什麼目的,有可能,而不使用UpdatePanel? – Ruby