私はあるページのテキストボックスから変数を取得し、別のページに表示するために変数を渡そうとしています。セッションを使用する必要があるように思えます(これは、この課題が対象としていたトピックなので)。コメントアウトされたコードは、私が試したことのないさまざまな方法です。スタートページ別のWebページに変数を渡す
:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None;
}
//This is a button link that sends to the next page, "Results"
protected void cbtnlSubmit_Click(object sender, EventArgs e)
{
string sName = "";
int sSize = 0;
string sTopping = "";
decimal sPrice = 0M;
if (IsPostBack)
{
Validate();
if (IsValid)
{
sName = ctbName.Text;
sSize = Convert.ToInt32(ctbSize.Text);
sTopping = ctbTopping.Text;
sPrice = Convert.ToDecimal(ctbPrice.Text);
if (string.IsNullOrEmpty(sTopping) == true)
{
sTopping = "cheese";
}
/* DOESN'T WORK
Session.Add(sName, sSize);
Session.Add(sTopping, sPrice);
Server.Transfer("Results.aspx");
*/
/*DOESN'T WORK
Session["pizza"] = new Pizza()
{
name = sName,
size = sSize,
topping = sTopping,
price = sPrice
};
*/
//ALSO DOESN'T WORK
Session["name"] = sName;
Session["size"] = sSize;
Session["topping"] = sTopping;
Session["price"] = sPrice;
Response.Redirect("Results.aspx");
}
}
}
}
これは、どちらのページが表示された変数
public partial class Results : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session.Count != 0)
{
lblName.Text = Session["name"].ToString();
string size = Session["size"].ToString();
string topping = Session["topping"].ToString();
string price = Session["price"].ToString();
string pizzaInfo = (size + " inch pizza with " + topping + " for $" + price.ToString());
lblPizzaInfo.Text = pizzaInfo;
/*
string name = Session.Keys[0];
int size = Convert.ToInt32(Session[name]);
string topping = Session.Keys[1];
decimal price = Convert.ToDecimal(Session[topping]);
string pizzaInfo = (size.ToString() + " inch pizza with " + topping + " for $" + price.ToString());
lblName.Text = name;
lblPizzaInfo.Text = pizzaInfo;
*/
}
lblName.Text = "Meaghan";
}
}
が表示されます "結果" ページです。セカンダリページの最後に設定されたlblName.Textは、ラベルが表示されていることを確認するテストですが、セカンダリページに情報が渡されていません。そのラベルは、if文の外側に置くだけで表示されます。 if文の中には何も実行されません。私は推奨された質問を読もうとしましたが、私は両方のページで "sessionState"を有効にする必要があることを発見しましたが、プログラムはまだ動作しません。
プロパティでEnableSessionStateをTrueに設定しましたが、aspxファイルの先頭にEnableSessionState = "True"と表示されます。私はweb.configファイルに追加しました。セッション状態モードは "InProc"モードだと思いますか?
セッション["test"] = "Hello"をデフォルトページに、Response.Write(Session ["test"])を結果ページに追加しようとしました。今度は、lblName.Text = Session ["name"]。ToString()[if文の内部]にNullReferenceExceptionをスローします。
デバッグするには、単にページ1のPage_Loadの内側に、セッションの1つをハードコーディングしてみてください。例えば'Session [" test "] =" Hello "' 2ページ目にもう一度page_loadで 'Response.Write(Session [" test "]);'何か起こったのですか? – Delosdos
Jaquelineサイトへようこそ。あなたのタイトルからキーワードを削除しました。これがタグセクションの目的です。 [どのようなセッションモード](http://stackoverflow.com/search?q=%5Basp.net%5D+session+mode)セットアップしましたか? – slugster
こんにちはジャクリーン、これまたは任意の答えがあなたの質問を解決した場合は、[それを受け入れる](http://meta.stackexchange.com/q/5234/179419)をチェックしてください。これは、あなたが解決策を見つけたことを広範なコミュニティに示し、回答者とあなた自身の両方にいくつかの評判を与えます。これを行う義務はありません。 – Seany84