2009-05-28 18 views
4

私はprgパターンの基礎を理解しています。しかし、私は、ページのインスタンスを取得するための任意のデータを利用できるようにする技術に触れていません。asp.net WebFormsでPost/Redirect/Getパターンを実装するにはどうすればよいですか?

たとえば、PostBackを開始したアクションに応じて、さまざまなフィードバックメッセージをユーザーに表示することができます。

クエリ文字列パラメータとして識別子を送信しています。これは正常に動作しますが、ブックマークの問題が発生し、うまく調整できないように見えます。 ViewStateをすべて送信する必要がある場合はどうすればよいですか?

残念ながら、私は現時点でWebFormsに縛られており、私の組織がmvcに移行するように説得することはできませんでした。

答えて

3

:あなたはボタンをクリックしたときに

protected void buttonClick(object sender, EventArgs e) 
    { 
     string text = Request.Params["text1"]; 

     Response.Write(text); 
    } 

URLは次のようになります。リダイレクトの前に、リダイレクト後にそのデータにアクセスする必要がある場合は、言及したように、クエリ文字列にデータレコードの識別子を追加します。また、リクエストのステータス(メッセージの表示など)を指定することもできます。 GETページでは、データを読み込んで何かを行うことができます。 GETして得られた各ページがアクセス権を持っていないので、

私はこれを回避する他の方法が表示されない、前のページのViewStateなど

にPOSTを扱うのと同じ効果を持ちますServer.Transferを使用します元のページ。

セッション変数を使用してPOSTデータを格納できますが、そのデータは悪臭を帯びます。

+0

ええ、私は情報が永続化する必要があることを知っています。私はそれを実装する最適な方法を探しています。私が理解しているように、Server.Transferはprgの "Redirect"部分をバイパスします。 –

+0

このシナリオで永続性を実装するために私に起こる唯一のオプションは、データをデータベースまたはファイルに格納/取得するか、またはセッションオブジェクトにデータを格納することです。POSTでデータを表すオブジェクトを格納することもできますが、Sessionにプリミティブ型を格納するほうが効率的です。 –

0

私はまだform要素でgetメソッドを使用できると思います。 この場合、通常の方法でコントロールのIDを使用することはできません。しかし、Request.Paramsコレクションを使用してviewstateを取得することができます。

更新:申し訳ありませんが、もう一度試しました。コードビハインドの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> 

を注: 私は、それぞれ "<" そうでない場合の前にスペースを使用しました上記のコードは表示されません。

ページの背後にあるコード(唯一のボタンクリックイベント):POSTさフィールドが永続化されている場合

http://localhost:1157/WebSite1/Default.aspx?__VIEWSTATE=%2FwEPDwUKMTkwNjc4NTIwMWRkoJEtEHZ8lHQ53QllSkz8ncpEw80%3D&__EVENTVALIDATION=%2FwEWAwKf%2BPPUCwKTjKGwCgKs34rGBvus9oxN%2FQkHlkzpKUEwrbxHLM6u&text1=ashish&button1=

+0

querystringのサイズには、2kbくらいの制限があります。 viewstateはこれよりも常に大きくなります。 – GlennG