0

フォームデータをブックマークしたり、他の人にメールで送信したりできるように、GETメソッドを使用するC#Webページを作成しようとしていますが、フォームメソッドをGETに変更すると、VIEWSTATEを含むクエリ文字列になります。runat = serverタグ(ここで説明)を削除することはできますが、フォームフィールドの値を設定する方法がわかりません。手動で永続化してもかまいませんが、その方法がわかりません。

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

4

1 に答える 1

0

たとえば、GETを介して必要なWebページの検索/フィルターフォームを使用している場合、これは私が自分のコードで複数回使用したパターンです。ユーザーがフォームに入力した内容を処理するためのボタンを送信すると、通常どおり、コードビハインドを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をいじることなく、実際にQueryStringに入力される内容を制御できます。また、ユーザーがフォームに入力してボタンを押すと、リンク可能なURLがあり、POSTであったとしても、ページを更新しても、サーバーへのデータの再送信に関する迷惑なメッセージは表示されません。 。

于 2012-04-20T22:13:16.367 に答える