2011-01-27 23 views

答えて

3

クエリ文字列でパラメータに渡されたデータを非表示にする場合は、

  1. フォームを使用して情報をPOSTします。これは、ソースページに追加のコードを必要とするかもしれませんが、ターゲットページでロジック変更を必要としません(Request.QueryStringをRequest.Formに変更するだけです)。 POSTは不可能ではありませんが、QueryStringパラメータを使用するよりも魅力的です。

  2. セッション変数を使用して、ページ間で情報を伝達します。これは、セッション変数のチェックを考慮する必要があるため(例えば、ユーザーが状態を常にチェックしている場合、BackボタンとForwardボタンを使用してナビゲートするのが難しくなるなど)、(1) 。セッションクッキーが有効になっていない場合も対処する必要があります(このソリューションはこれらの人々にとってはうまくいきません)。

  3. 実際のデータの代わりにQueryStringに「エンコードされた」または非センシティブな情報を使用します。これには、すべてのページ提出のいずれかの終わりにエンコードおよびデコードスキームを作成する努力が必要です。もちろん、ユーザーはあなたのスキームを実験しリバースエンジニアリングすることができますが、既存のQueryStringに意味のある変更がすぐに発生する可能性は低くなります。

  4. フレームセットを使用します。私はこのアプローチをお勧めしませんが、それはかなり一般的です。情報の変更をより困難にするのではなく、情報を隠そうとしている場合でも、ユーザーは個々のフレームを右クリックしてプロパティをクリックして、QueryStringで渡されたすべての情報を取得できます。

  5. 使用Server.Transferを本当に

0

(のURLのみを簡単に見えた)、まだ最初のページに渡されたのQueryStringパラメータにアクセスする必要がありますされ、2番目のページにあなたのコントロールを移動します可能であれば、データを直接default.aspxにPOSTする必要があります。呼び出し元が別のページである場合、特にサイトマップの機能に頼っている場合は、ウェブフォームでちょっとしたことが起こります。いずれの場合でも、 "クロスページの投稿"を使用してデータを投稿することも、 "server.transfer"を使用することもできます。リダイレクトでセッション状態を使用すると、非効率的(クライアントの余分な往復)ですが、しばしば便利です。

Webフォーム(呼び出し元):

コードビハインド(呼び出し元):

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    Session["id"] = 2; // pull the data from the control or use OnCommand? 
    Session["name"] = "Sanjay"; 
    Response.Redirect("~/Default.aspx"); 
} 

と受信ページしたがって、たとえば、呼び出しページは次のようになります。 、 デフォルト。

Webフォーム::

Name: <%=_name %> 
<br /> 
Id: <%= _id %> 

コードビハインド:

protected int? _id 
{ 
    get { return Session["id"] as int?; } 
    set { Session["id"] = value; } 
} 
protected string _name 
{ 
    get { return Session["name"] as string; } 
    set { Session["name"] = value; } 
} 

幸運のaspxは次のようになります!

関連する問題