6

C#ASP.Netを使用して、あるページから別のページにフォームデータを送信しようとしています。default.aspxとdefault2.aspxの2つのページがあります。default.aspxにあるコードは次のとおりです。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Go" 
    PostBackUrl="~/Default2.aspx" />
<br />

私がこれまでに知っていることから、PostBackUrlは、データを送信するページを設定するために使用されますが、これは正しいですか?

また、Default2.aspxに送信されたデータを取得するにはどうすればよいですか?

4

5 に答える 5

24

いくつかのオプションがあります。検討してください

  1. セッション状態
  2. クエリ文字列

セッション状態

ページ間でデータを送信する場合は、Session Stateの使用を検討できます。

ASP.NET セッション状態を使用すると、ユーザーが Web アプリケーションで ASP.NET ページをナビゲートするときに、ユーザーの値を格納および取得できます。HTTP はステートレス プロトコルです。これは、Web サーバーがページに対する各 HTTP 要求を独立した要求として扱うことを意味します。サーバーは、以前のリクエストで使用された変数の値を保持していません。ASP.NET セッション状態は、限られた時間枠での同じブラウザーからの要求をセッションとして識別し、そのセッションの間、変数値を永続化する方法を提供します。デフォルトでは、ASP.NET セッション状態はすべての ASP.NET アプリケーションに対して有効になっています。

何よりも、簡単です!

データを入れます (たとえば、default1.aspx に)

Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;

取得します (たとえば、default2.aspx で)

string firstname = Session["FirstName"] // value of FirstNameTextBox.Text;
string lastname = Session["LastName"] // value of LastNameTextBox.Text; 

クエリ文字列

少量のデータ (id=4 など) を送信する場合は、クエリ文字列変数を使用する方が実用的です。

クエリ文字列変数の使用を検討する必要があります。

http://www.domain.com?param1=data1&param2=data2

その後、次のようにデータを取得できます

string param1 = Request.QueryString["param1"]; // value will be data1
string param2 = Request.QueryString["param2"]; // value will be data2

Request.QueryString[] 変数をどのようにテストしますか? のようなものを使用できます。データを取得します。

クエリ文字列変数に慣れていない場合は、ウィキペディアの記事をチェックしてください

于 2012-10-07T12:34:48.280 に答える
7

セッション変数は、このコンテキストで役立ちます。

たとえば、テキストボックスにログイン資格情報が含まれていると仮定し、セッションに保存して、後で他のページで使用できるようにします。このような:

Button_Click-

Session["name"]=TextBox1.Text;
Session["pwd"]= TextBox2.Text;

代わりにPostBackUrl="~/Default2.aspx"、次のように書くことができます-

//in button click
Server.Transfer("~/Default2.aspx");

Default2.aspx ページの読み込み:

string a= Session["name"].ToString();
string b= Session["pwd"].ToString();
于 2012-10-07T12:37:17.283 に答える
3

Page_LoadDefault2.aspxでこれを試してください。

 if (PreviousPage != null)
        {
            if (((TextBox)PreviousPage.FindControl("TextBox1")) != null)
            {
                string txtBox1 = ((TextBox)PreviousPage.FindControl("TextBox1")).Text;
                Response.Write(txtBox1);
            }
        }

PostBackUrlはい、そのとおりです。この属性を使用すると、ページ 1 のデータがページ 2 に送信されます。

MSDN リンク

于 2012-10-07T12:11:37.413 に答える
2

ここでのすべての答えは機能しますが、いくつかは最も効率的ではありません。単純/標準http POSTが(高価な)サーバー側を呼び出さなければならないのはなぜSessionですか?

あなたのコードは特別なことは何もしていません-それは単にフォームを別のページにPOSTしているだけです。POSTされたデータを取得するために必要なのは、Request.Formコレクションを通過することだけです。

PostBackUrl(メモリがasp.netのバージョン1を提供する場合)を設定できるようになる前、Server.Transferおよび前のページへの参照を取得することは、クロスページPOSTがどのように行われたか/文書化されたかでした。ただし、を使用するとPostBackUrl、物事は基本に戻ります。つまり、http POSTあるリソースから別のリソースへの標準です。

これはおそらく役立つ同様のSOスレッドです。

于 2012-10-07T18:39:44.237 に答える