Web ポータルのパフォーマンスを改善しようとしています。状態情報を保存するために Session を使用しています。
しかし、セッションを使用するとアプリケーションの速度が低下すると聞きました。asp.net でページ全体に値を渡す方法は他にありますか。
Web ポータルのパフォーマンスを改善しようとしています。状態情報を保存するために Session を使用しています。
しかし、セッションを使用するとアプリケーションの速度が低下すると聞きました。asp.net でページ全体に値を渡す方法は他にありますか。
次の方法で、あるページから別のページに値を渡すことができます。
Response.Redirect
Cookies
Application Variables
HttpContext
Response.Redirect
設定 :
Response.Redirect("Defaultaspx?Name=Pandian");
得る :
string Name = Request.QueryString["Name"];
クッキー
設定 :
HttpCookie cookName = new HttpCookie("Name");
cookName.Value = "Pandian";
得る :
string name = Request.Cookies["Name"].Value;
アプリケーション変数
設定 :
Application["Name"] = "pandian";
得る :
string Name = Application["Name"].ToString();
ここで完全なコンテンツを参照してください:ある値から別の値を渡す
これを実現する方法は複数あります。私たちが日常のプログラミングライフサイクルで使用している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エンコード
2.コンテキストオブジェクトを介して値を渡す
コンテキストオブジェクトを介して値を渡すことも、広く使用されているもう1つの方法です。
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では、Microsoftは、クロスページポストバックのコントロールの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;
お気づきのとおり、これはページ間で値を渡すためのシンプルでクリーンな実装でもあります。
ハッピーコーディング!
ページ間で値を渡すだけで、1 つの要求に対してのみ必要な場合。使用するContext.
環境
Context オブジェクトは、1 人のユーザーと 1 つのリクエストのデータを保持し、リクエストの間だけ保持されます。Context コンテナーは大量のデータを保持できますが、global.asax のハンドラーを介して要求ごとに実装されることが多いため、通常は小さなデータを保持するために使用されます。Context コンテナー (Page オブジェクトから、または System.Web.HttpContext.Current を使用してアクセス可能) は、異なる HttpModules と HttpHandlers の間で渡す必要がある値を保持するために提供されます。また、リクエスト全体に関連する情報を保持するためにも使用できます。たとえば、IBuySpy ポータルは、global.asax の Application_BeginRequest イベント ハンドラー中に、一部の構成情報をこのコンテナーに詰め込みます。これは、現在のリクエスト中にのみ適用されることに注意してください。次のリクエストのために何かが必要な場合は、ViewState の使用を検討してください。Context コレクションのデータの設定と取得には、Application、Session、Cache などの他のコレクション オブジェクトで既に見たものと同じ構文が使用されます。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
、コンテキストに保存したデータを次のページで使用できるようにします。このデータは現在のリクエストにのみ適用されるため、このデータの削除/整理について心配する必要はありません。
非表示フィールドに割り当てて、次を使用して取得できます
var value= Request.Form["value"]
クエリ文字列を使用して、あるページから別のページに値を渡すことができます..
1.クエリ文字列を使用して値を渡す
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";
}
}
注: 方法 2 が最速の方法です。