试图在C#类之间传递一个字符串

时间:2015-12-04 12:44:18

标签: c# asp.net database

我正在尝试使用会话在C#类之间传递字符串。我有一个名为Profile的课程,它有一个搜索框。我有另一个名为SearchResults的类,它应该在我的数据库中搜索在搜索框中输入的内容。

单击搜索按钮后,Profile类中的此方法称为:

 protected void Search(object sender, EventArgs e)
 {
     Response.Redirect("~/SearchResults.aspx");
     String searchedItem = txt_search.Text;
     Session["search"] = searchedItem;
 }

这是Page_Load页面中的SearchResults方法:

protected void Page_Load(object sender, EventArgs e)
{

    string searchedItem = (string)(Session["search"]);

    string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
    SqlConnection conn = new SqlConnection(connStr);
    SqlCommand SearchGames = new SqlCommand("SearchGames", conn);
    SearchGames.CommandType = CommandType.StoredProcedure;
    SearchGames.Parameters.Add(new SqlParameter("@game_name", searchedItem));

    conn.Open();

    SqlDataReader rdr = SearchGames.ExecuteReader(CommandBehavior.CloseConnection);

}

我收到错误说我的

  

SearchGames过程需要一个@game_name参数,而不是   供给

,但很明显我已经通过了这个参数,这导致我认为SearchItem有问题(或者我如何在两个类之间传递字符串。

2 个答案:

答案 0 :(得分:3)

您在设置会话之前重定向,我认为您应该在设置会话后重定向:

String searchedItem = txt_search.Text;
Session["search"] = searchedItem;
Response.Redirect("~/SearchResults.aspx");

答案 1 :(得分:0)

不是试图通过会话传递参数,而是将其注入重定向:

protected void Search(object sender, EventArgs e)
{
    Response.Redirect($"~/SearchResults.aspx?search={txt_search.Text}");
}

或者,如果不使用C#6,

protected void Search(object sender, EventArgs e)
{
    Response.Redirect("~/SearchResults.aspx?search=" + txt_search.Text);
}

然后在Page_Load内,将其更改为:

protected void Page_Load(object sender, EventArgs e)
{
    string searchedItem = Request.QueryString["search"];
    ...

这样,您就可以避免通过全局变量传递值,这将使代码更加健壮并使测试更容易。