2012-04-20 3 views
0

フォームデータをブックマークしたり、他の人に電子メールで送るなど、GETメソッドを使用するC#Webページを作成しようとしていますが、フォームメソッドをGETに変更すると、VIEWSTATEを含むクエリ文字列が返されます。 runat = serverタグ(上記のhere)を取り出すことができますが、フォームフィールドの値を設定する方法はわかりません。手作業で永続化しても構いませんが、どのように把握できません。クエリ文字列を利用するためにGETでフォームを使用する方法はありますが、クエリ文字列にはVIEWSTATEはありませんか?

ビューステートを利用していますが、クエリーストリングから外したり、runat = serverなしでフォームコントロールにアクセスするにはどうすればよいですか?

+1

あなたのページのviewstateを無効にするだけですが、コントロールではrunat = "server"を維持してください –

答えて

0

たとえば、自分のWebページでGETで検索/フィルタフォームを使用している場合は、自分のコードで複数回使用したパターンがあります。ユーザーがフォームに入力した内容を処理するためのボタンを送信すると、コードビハインドが正常なPOSTとしてPOSTされます。それから私は、手動でGETリクエストを構築し、それにリダイレクト:

protected void BtnSubmit_Click(object sender, EventArgs e) 
{ 
    var query = 
     "?filter1=" + TxtFilter1.Text + 
     "&filter2=" + TxtFilter2.Text + 
     "&filter3=" + TxtFilter3.Text; // etc. 
    Response.Redirect(query); 
} 

は、次に、ページの読み込み時に、私は、クエリ文字列内のエントリページのように事前に移入関連のフォームコントロールを処理:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     TxtFilter1.Text = Request.QueryString["filter1"] ?? ""; 
     TxtFilter2.Text = Request.QueryString["filter2"] ?? ""; 
     TxtFilter3.Text = Request.QueryString["filter3"] ?? ""; 
     // etc. 
    } 
} 

これにより、ASP.Netが管理する組み込みフォームPOST(View Stateを含む)を使わずに、実際にQueryStringに入るものを制御できます。また、ユーザーがフォームに記入してボタンを押すと、リンク可能なURLがあり、POSTであっても、ページを更新すると、サーバーにデータを再送信するという面倒なメッセージは表示されません。

関連する問題