2013-10-23 40 views
0

我已经创建了一个使用ajax的自动完成文本框,它出色地工作。它基本上提供了房间代码列表。以下是代码:基于查询字符串的自动完成文本框

[System.Web.Script.Services.ScriptMethod()] 
[System.Web.Services.WebMethod] 
public static List<string> GetRoomList(string prefixText, int count) 
{ 
    using (SqlConnection roomsConnection = new SqlConnection()) 
    { 
    roomsConnection.ConnectionString = ConfigurationManager.ConnectionStrings["roomsConnectionString"].ConnectionString; 
    using (SqlCommand roomsCommand = new SqlCommand()) 
    { 
     roomsCommand.CommandText = "select Room, Site from tblRoom where Room like '%' + @SearchText + '%'"; 
     roomsCommand.Parameters.AddWithValue("@SearchText", prefixText); 
     roomsCommand.Connection = roomsConnection; 
     roomsConnection.Open(); 

     List<string> roomList = new List<string>(); 
     using (SqlDataReader roomReader = roomsCommand.ExecuteReader()) 
      { 
       while (roomReader.Read()) 
       { 
        roomList.Add(roomReader["Room"].ToString()); 
       } 
      } 
      roomsConnection.Close(); 
      return roomList; 
     } 
    } 
} 

但是,我希望根据用户在上一页选择的选项生成此房间代码列表。有两种方式可以传递选项。一个是使用查询字符串。这是我写的代码:

[System.Web.Script.Services.ScriptMethod()] 
[System.Web.Services.WebMethod] 
public static List<string> GetRoomList(string prefixText, int count) 
{ 
    using (SqlConnection roomsConnection = new SqlConnection()) 
    { 
     roomsConnection.ConnectionString = ConfigurationManager.ConnectionStrings["roomsConnectionString"].ConnectionString; 

     HttpRequest request = HttpContext.Current.Request; 
     string site1 = request.QueryString["site"]; 

     using (SqlCommand roomsCommand = new SqlCommand()) 
     { 
      roomsCommand.CommandText = "select Room, Site from tblRoom where Site = '" + site1 + "' AND Room like '%' + @SearchText + '%'"; 
      roomsCommand.Parameters.AddWithValue("@SearchText", prefixText); 
      roomsCommand.Connection = roomsConnection; 
      roomsConnection.Open(); 

      List<string> roomList = new List<string>(); 
      using (SqlDataReader roomReader = roomsCommand.ExecuteReader()) 
      { 
      while (roomReader.Read()) 
       { 
        roomList.Add(roomReader["Room"].ToString()); 
       } 
      } 
      return roomList; 
      roomsConnection.Close(); 
    }      
    }    
} 

我没有得到任何错误,这个它只是不从查询字符串存储“网站”。我已经在我的网页的其他区域使用了它,它工作正常。

我希望它的另一种工作方式是使用Page.PreviousPage。再次这是我写的:

[System.Web.Script.Services.ScriptMethod()] 
[System.Web.Services.WebMethod] 
public static List<string> GetRoomList(string prefixText, int count) 
{ 
    using (SqlConnection roomsConnection = new SqlConnection()) 
    { 
     roomsConnection.ConnectionString = ConfigurationManager.ConnectionStrings["roomsConnectionString"].ConnectionString; 
     if (Page.PreviousPage != null) 
     { 
      if (Page.PreviousPage.IsCrossPagePostBack == true) 
      { 
       string site1 = PreviousPage.getDropDownListSite.SelectedValue; 

       using (SqlCommand roomsCommand = new SqlCommand()) 
       { 
         roomsCommand.CommandText = "select Room, Site from tblRoom where Site = '" + site1 + "' AND Room like '%' + @SearchText + '%'"; 
         roomsCommand.Parameters.AddWithValue("@SearchText", prefixText); 
         roomsCommand.Connection = roomsConnection; 
         roomsConnection.Open(); 

         List<string> roomList = new List<string>(); 
         using (SqlDataReader roomReader = roomsCommand.ExecuteReader()) 
         { 
          while (roomReader.Read()) 
          { 
           roomList.Add(roomReader["Room"].ToString()); 
          } 
         } 
       return roomList; 
       roomsConnection.Close(); 
       }   
      } 
     } 
    } 
} 

我不能让这个代码工作,因为它不喜欢Page.PreviousPage。我得到错误

An object reference is required for the non-static filed, method, or property  'system.Web.UI.Page.PreviousPage.get' 

但我不能确定还有什么可以使用。我曾尝试使用会话变量,它工作的很好,但如果我用户需要在同一个会话中再次使用表单,它将保留上一个值。

我打算给我们一个if,else语句,一旦我有单独的组件工作。

任何人都可以帮忙。我真的很感激它。 非常感谢

回答

0

比获取将WebMethod内的查询参数更好的方法,是把参数作为参数传递给您的WebMethod:

[System.Web.Script.Services.ScriptMethod()] 
[System.Web.Services.WebMethod] 
public static List<string> GetRoomList(string prefixText, int count, string site) 
{ 
    ... 
} 

在调用页面,你必须设置查询字符串到Page_Load函数中的contextKey。 contextKey可以传递给web方法,以便您可以在webmethod中访问这个变量。

+0

谢谢,谢谢,谢谢。那正是我需要的。我很抱歉,需要一段时间才能回复,但我不在。这真的帮助了我。对此,我真的非常感激。谢谢。 – user2560913