2017-11-14 19 views
1

私はウェブアプリケーションプロジェクトに取り掛かり、2番目のWebページに自分の答えを表示する方法を見つけようとしています。2つのWebページ間でデータを共有するにはどうすればよいですか?

私は最初のWebページにテキストボックスを置き、デバッグした後に正しい答えをテキストボックスに受け取ったので、アプリケーションのコーディングを修正しました。

理想的には、このテキストボックスを削除して、次のウェブページのラベルに表示されたテキストボックスに表示することができた回答をしたいと考えています。ここで私のコードの計算部分です。

var cost = ((int)duration.TotalMinutes) * 0.35m; 
       txtCost.Text = cost.ToString("c"); 

私の回答は私の2番目のウェブページに表示され、最初に表示されないようにしたいと思います。私は最初のWebページdouble cost = (double)(Session["Cost"]); lblDisplay.Text = cost.ToString("c"); のボタンクリックイベントハンドラでSession["Cost"] = cost;を使用しようとしましたが、これは2番目のWebページでデバッグして実行するたびに常に$ 0.00が表示されます。誰かが私にこれを解決させる手助けはできますか

MVCアプリケーション内の2つのビュー間の
+0

主な質問は、2つのWebアプリケーションとシナリオは、2つのWebページ用であると言います。より多くの/完全なコードはあなたにいくつかの助けを得ることができます。 – Amit

+0

確かに、別々のWebアプリケーションや、同じWebアプリケーション内の異なるページについて話していますか?また、このWebFormsまたはMVCアプリケーションですか? –

+0

複数ページのアプリケーションの人...そのことについて... 2つのWebページのみ –

答えて

0

共有値は、セッション状態の場合

// To save into the Cache  
System.Web.HttpContext.Current.Cache["CostKey"] = cost; 

// To retrieve Cache Value 
var cachedValue = System.Web.HttpContext.Current.Cache["CostKey"] as double; 

次しようとASP.NET Webフォームアプリケーションで、このlink

+0

「CostKey」の名前について説明してください。私の中には文脈に存在しないと言われているからだ。 –

+0

あなたはどんな名前でも与えることができる。 CostKeyは単なる名前であり、値を取得するときに使用されます。私は自分の答えを修正しました。キー名は文字列型であると仮定します。私の間違い。 –

0

を見て、あなたは様々で周りのデータを渡すことができます方法:

  1. キャッシュ

    のSe例題の学習曲線の答え。 ただし、キャッシュに格納されたオブジェクトは、サーバーのメモリ不足などの問題が発生した場合に再度検出されることはありません。 ASP.NETはキャッシュを管理し、メモリ可用性を維持するためにオブジェクトを追い出します。これは、ApplicationStateSessionStateと対照的です。オブジェクトは手動で削除されるか、Applicationが終了するか、Sessionが期限切れになるまで保持されます。

  2. セッションとアプリケーションの状態

    あなたはSessionState objectで任意のオブジェクトを入れて、あなたのコード内の別の場所にそれを取得することができます。ただし、SessionStateobject-sを受け入れるので、適切にキャストする必要があります。例えば。数字を保存する場合は、数字を検索するときに、すでに行ったように、自分でキャストしなければなりません。 それがうまくいかない理由は、別のユーザーのSessionState内から検索しようとしている可能性があります。はい、SessionStateは、ユーザーごとの構造です。あなたは、use ApplicationStateを一つのデバイスからのような値を追加し、別の上でそれを使用する必要がある場合:

    Application["cost"] = cost; 
    
  3. リダイレクトレスポンス

    この技術を使用して、サーバーから別のページを要求するブラウザを強制でき、必要な変数を含む完全なクエリ文字列を指定します。例えば。 :

    var destination = Server.UrlEncode("/someOtherPage.aspx?cost=34.65"); 
    Response.Redirect(destination); 
    

    代替方法として、Server.Transfer("someOtherPage.aspx")を使用してラウンドトリップを保存することができます。しかし、その場合、ブラウザはアドレスバーのアドレスを変更しないので、ユーザーは誤って1ページをブラウズしますが、実際はsomeOtherPage.aspxです。

関連する問題