どのように私はasp.net Webフォームで郵便/リダイレクト/取得パターンを実装できますか?
-
06-09-2019 - |
質問
だから私はPRGパターンの基本を理解しています。しかし、私は、ページの「取得」のインスタンスが利用可能な任意のデータを作るための技術に遭遇していない。
たとえば、私は、ポストバックを開始した彼らの行動に応じて、ユーザーにさまざまなフィードバックメッセージを表示したい場合があります。
私は、クエリ文字列パラメータとして識別子を送信して行ってきました。これは正常に動作しますが、それはブックマークの問題を紹介し、それは非常にうまくスケールしまうように見えるしていません。私は、ViewStateのすべてを送信するために必要な場合はどう?
残念ながら、私は現時点ではWebフォームに結びついてるとMVCに移行するために、私の組織を説得することができていない。
解決
は、私はあなたが言及として、クエリ文字列のデータ・レコード(複数可)の識別子を追加します。また、(メッセージなどを表示するための)要求のステータスを指定することができます。そして、GETのページには、データを読み出すことができますし、それをやります。
私がGETして得られた各ページ、前のページのViewState
などへのアクセス権を持っていないので、これを回避するために他の方法が表示されません。
Server.Transfer
を使用すると、元のページにPOSTを扱うのと同じ効果を持つことになります。
あなたはPOSTデータを保存するためにセッション変数を使用することができ、それは臭います。
他のヒント
私はあなたがまだフォーム要素でgetメソッドを使用することができると思います。 この場合、あなたは、通常の方法であなたのコントロールのIDを使用することはできません。しかし、あなたはビューステートを取得するためにRequest.Paramsコレクションを使用することができます。
更新:申し訳ありませんが、私はもう一度試してみました。あなたが分離コードでそのIDによってサーバーコントロールにアクセスできることを見出しました。同様ます:
Response.Write(text1.Text)
の例を参照してください。
ASPXページ(のみフォーム要素)
< form id="form1" runat="server" method="get">
< div>
< asp:TextBox ID="text1" runat="server" />
< asp:Button ID="button1" runat="server" OnClick="buttonClick" />
< div>
< form>
注: 私は、そうでない場合は上記のコードは表示されません「<」各々の前にスペースを使用する。
ページの背後にあるコード(ボタンのみイベントをクリックしてください):
protected void buttonClick(object sender, EventArgs e)
{
string text = Request.Params["text1"];
Response.Write(text);
}
ボタンをクリックすると、URLは次のようになります。