使用Ajax调用静态方法访问ViewState变量

时间:2014-02-09 10:31:30

标签: jquery ajax

Ajax的新手,这是一个问题。

Aspx页面有一个网格视图(允许排序)。网格下方是一个下拉列表,页面编号为。用户可以选择一个号码进入该页面。在初始页面加载时,网格显示记录,列 - 'OrderId'按'desc'顺序排序。 当前排序的顺序和此列的名称存储为ViewState变量。排序任何列时,这些变量都会更新。

获取数据的存储过程,接受columnName,SortOrder,PageNo。和页面大小作为参数。

此代码工作正常。现在,我想在Ajax调用中使用它。如果更改为“public static”,则无法访问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;
  }            
 }

1 个答案:

答案 0 :(得分:0)

如果您已经在ASP.NET上,那么可以使用UpdatePanel来执行Ajax。它会阻止整页重新加载。