2012-02-15 12 views
0

私はウェブサイトを作成しています。ホームページにはテキストボックスとドロップダウンボックスがあり、ユーザはムービーの名前と検索する言語を入力します。ユーザーが[検索]ボタンをクリックすると、検索結果ページが表示され、検索結果がデータグリッドに表示されます。私はテキストボックスと他のページで使用されるデータグリッドのテキストを渡すためにセッション変数を作成しました。データベースからデータをフェッチするコードはクラスにあります。データベースから受け取った値を別のページのメソッドに渡すにはどうすればいいですか?これは私が書いたコードですが、エラーはありませんが、データグリッドは結果で満たされません。何が間違っているのですか?クラスから別のクラスのメソッドに値を渡す

//Code for search button in home page 
protected void Btnsearch_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("SearchResults.aspx"); 
     Session["moviename"] = TextBox3.Text; 
     Session["language"] = DropDownList1.Text; 
    } 

//Code to fetch data from database 
public class movie 
    { 
    public SqlDataAdapter searchmovie(object moviename, object language) 
    { 
     connection.con.Open(); 
       SqlDataAdapter adapter1 = new SqlDataAdapter("select 
           select movieName,language,director,price from movie  
             where moviename = '" + moviename + "' and 
             language = '" + language + "'", 
       return adapter1; 

} 
    } 

    //Code in search page to fill data grid with search results 
     public partial class SearchResults : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     movie m = new movie(); 
     SqlDataAdapter movieDetails = m.searchmovie(Session["moviename"], 
            Session["language"]); 
     DataSet data = new DataSet(); 
     movieDetails.Fill(data, "movieD"); 
     GridView1.DataSource = data.Tables["movieD"]; 
     GridView1.DataBind(); 
    } 
} 
+1

短い文字列を渡すときは、SessionではなくQueryStringsを使うほうがはるかに優れています。セッションを使用する場合、以前の呼び出しの値がまだそこにあることを心配する必要があります。検索ページをレンダリングするとすぐに必要のないデータでセッションを詰まらせます(削除しない限りより多くの時間/労力)、同じセッション変数をアプリケーションのさまざまな場所で使用することについて心配する必要があります(同じオブジェクトを再利用する場合としない場合があります)。原則として、選択肢がない限り、セッションの使用を避ける必要があります。ここには選択肢があります。 – Servy

答えて

2

はこのように、リダイレクトする前にセッション変数を設定します。

protected void Btnsearch_Click(object sender, EventArgs e) 
{ 
    Session["moviename"] = TextBox3.Text; 
    Session["language"] = DropDownList1.Text; 
    Response.Redirect("SearchResults.aspx");   
} 
+0

これで問題はありません –

2

私はデータストレージとしてセッションを避けるためにお勧めしたいと思います。

ASP.NETには、クロスポストという優れた機能があります。これにより、すべてのページの制御と状態をページ間で行うことができます。

http://msdn.microsoft.com/en-us/library/ms178139.aspx

個人的に、私は本当にあなたがコントロール暴露広告特性を持つ、オブジェクトとしてページを参照することができますので、機能が大好き!

関連する問題