web-dev-qa-db-ja.com

セッションを使用せずにASP.netのページ間で値を渡す方法

Webポータルのパフォーマンスを改善しようとしています。 Sessionを使用して状態情報を保存しています。

しかし、セッションを使用すると、アプリケーションの速度が低下すると聞いた。 asp.netのページ全体に値を渡す他の方法はありますか。

28
Optimus

次の方法で、あるページから別のページに値を渡すことができます。

Response.Redirect
Cookies
Application Variables
HttpContext

Response.Redirect

セットする :

Response.Redirect("Defaultaspx?Name=Pandian");

取得する :

string Name = Request.QueryString["Name"];

Cookies

セットする :

HttpCookie cookName = new HttpCookie("Name");
cookName.Value = "Pandian"; 

取得する :

string name = Request.Cookies["Name"].Value;

アプリケーション変数

セットする :

Application["Name"] = "pandian";

取得する :

string Name = Application["Name"].ToString();

ここで完全なコンテンツを参照してください: 値を相互に渡す

51
Pandian

これを実現する方法は複数あります。日常のプログラミングライフサイクルで使用する4つのタイプについて簡単に説明できます。

以下の点をご覧ください。

1クエリ文字列

FirstForm.aspx.cs

Response.Redirect("SecondForm.aspx?Parameter=" + TextBox1.Text);

SecondForm.aspx.cs

TextBox1.Text = Request.QueryString["Parameter"].ToString();

これは、整数の種類の値または他の短いパラメーターを渡す場合の最も信頼できる方法です。値に特殊文字を使用してクエリ文字列を渡す場合は、このメソッドをさらに進めます、次のページに渡す前に値をエンコードする必要があります。したがって、コードスニペットのようなものになります:

FirstForm.aspx.cs

Response.Redirect("SecondForm.aspx?Parameter=" + Server.UrlEncode(TextBox1.Text));

SecondForm.aspx.cs

TextBox1.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());

URLエンコーディング

  1. Server.URLEncode
  2. HttpServerUtility.UrlDecode

2。コンテキストオブジェクトを介して値を渡す

コンテキストオブジェクトを介して値を渡すことも、広く使用されている別の方法です。

FirstForm.aspx.cs

TextBox1.Text = this.Context.Items["Parameter"].ToString();

SecondForm.aspx.cs

this.Context.Items["Parameter"] = TextBox1.Text;
Server.Transfer("SecondForm.aspx", true);

Response.Redirectの代わりにServer.Transferを使用して別のページに移動していることに注意してください。一部のユーザーはSessionオブジェクトを使用して値を渡します。そのメソッドでは、値はSessionオブジェクトに格納され、その後2番目のページのSessionオブジェクトから引き出されます。

3。 PostBackの代わりに別のページにフォームを投稿する

ページを別のフォームに投稿して値を渡す3番目の方法。その例を次に示します。

FirstForm.aspx.cs

private void Page_Load(object sender, System.EventArgs e)
{
   buttonSubmit.Attributes.Add("onclick", "return PostPage();");
}

そして、フォームをポストするjavascript関数を作成します。

SecondForm.aspx.cs

function PostPage()
{
   document.Form1.action = "SecondForm.aspx";
   document.Form1.method = "POST";
   document.Form1.submit();
}
TextBox1.Text = Request.Form["TextBox1"].ToString();

ここでは、フォーム自体ではなく別のページにフォームを投稿しています。この方法を使用すると、2番目のページでビューステートが無効またはエラーになる場合があります。このエラーを処理するには、EnableViewStateMac=false

4。別の方法は、クロスページポストバックのコントロールのPostBackURLプロパティを追加することです

ASP.NET 2.0では、クロスページポストバックのコントロールのPostBackURLプロパティを追加することにより、この問題を解決しています。実装は、コントロールの1つのプロパティを設定するだけで完了です。

FirstForm.aspx.cs

<asp:Button id=buttonPassValue style=”Z-INDEX: 102″ runat=”server” Text=”Button”         PostBackUrl=”~/SecondForm.aspx”></asp:Button>

SecondForm.aspx.cs

TextBox1.Text = Request.Form["TextBox1"].ToString();

上記の例では、ボタンのPostBackUrlプロパティを割り当てて、それ自体ではなく、投稿するページを決定できます。次のページでは、Requestオブジェクトを使用して前のページのすべてのコントロールにアクセスできます。

従来のRequestオブジェクトを使用する代わりに、PreviousPageクラスを使用して前のページのコントロールにアクセスすることもできます。

SecondForm.aspx

TextBox textBoxTemp = (TextBox) PreviousPage.FindControl(“TextBox1″);
TextBox1.Text = textBoxTemp.Text;

お気づきのとおり、これはページ間で値を渡すシンプルでクリーンな実装でもあります。

参照: Microsoft MSDN WEBSITE

ハッピーコーディング!

27
शेखर

ページ間で値を渡すためだけのもので、1つの要求に対してのみ必要な場合。 Context.を使用

コンテキスト

Contextオブジェクトは、単一のユーザー、単一のリクエストのデータを保持し、リクエストの期間のみ保持されます。 Contextコンテナーは大量のデータを保持できますが、global.asaxのハンドラーを介してすべての要求に対して実装されることが多いため、通常は小さなデータの保持に使用されます。 Contextコンテナ(Pageオブジェクトから、またはSystem.Web.HttpContext.Currentを使用してアクセス可能)は、異なるHttpModuleとHttpHandlerの間で渡す必要がある値を保持するために提供されます。また、リクエスト全体に関連する情報を保持するためにも使用できます。たとえば、IBuySpyポータルは、global.asaxのApplication_BeginRequestイベントハンドラー中に、このコンテナーにいくつかの構成情報を詰め込みます。これは現在のリクエスト中にのみ適用されることに注意してください。次のリクエストのためにまだ必要なものが必要な場合は、ViewStateの使用を検討してください。 Contextコレクションからのデータの設定と取得では、アプリケーション、セッション、キャッシュなどの他のコレクションオブジェクトで既に見たものと同じ構文を使用します。以下に2つの簡単な例を示します。

// Add item to
Context Context.Items["myKey"] = myValue;

// Read an item from the
 Context Response.Write(Context["myKey"]);

http://msdn.Microsoft.com/en-us/magazine/cc300437.aspx#S6

上記を使用します。その後、Server.Transferを実行すると、コンテキストに保存したデータが次のページで使用可能になります。このデータは現在のリクエストのみに限定されているため、このデータの削除/整理について心配する必要はありません。

3
Sam Shiles

非表示フィールドに割り当てて、次を使用して取得できます

var value= Request.Form["value"]
1
Matthew Evans

クエリ文字列を使用して、あるページから別のページに値を渡すことができます。

1. querystringを使用して値を渡す

 Response.Redirect("Default3.aspx?value=" + txt.Text + "& number="+n);

2.これらの方法のいずれかを使用して、必要なページの値を取得します。

方法1

    string v = Request.QueryString["value"];
    string n=Request.QueryString["number"];

方法2

      NameValueCollection v = Request.QueryString;
    if (v.HasKeys())
    {
        string k = v.GetKey(0);
        string n = v.Get(0);
        if (k == "value")
        {
            lbltext.Text = n.ToString();
        }
        if (k == "value1")
        {
            lbltext.Text = "error occured";
        }
    }

NOTE:方法2は最速の方法です。

1
coder