我想从一个页面中的文本框中获取变量,然后将它们传递到另一个页面中显示。好像我应该使用会话(因为这是这个任务的主题)。注释掉的代码是我试过的各种方法都没有奏效。将变量传递给另一个网页
在起始页:
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”模式?
我尝试在默认页面和Response.Write(Session [“test”])中添加Session [“test”] =“Hello”到Results页面。现在它会在lblName.Text = Session [“name”]。抛出一个NullReferenceException。ToString()[在if语句内]。
要调试,尝试硬编码的会议之一,只是在一个页面上的Page_Load里面。例如'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