2014-02-09 58 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