ASP.NET Web Form跨页传递lblGrandTotal标签值到Checkout.aspx问题咨询
ASP.NET Web窗体跨页传递Label值解决方案
核心失效原因
你当前代码无法传值的核心问题出在跳转逻辑:btn_Payment_Click 方法中连续写了两次Response.Redirect,第一次执行不带参数的Response.Redirect("Checkout.aspx");时就已经终止了当前请求的后续代码执行,带参数的第二行跳转逻辑根本不会运行。
修正代码
1. 修正Order.aspx.cs的跳转逻辑
删除冗余的跳转行,只保留带参数的跳转代码即可:
protected void btn_Payment_Click(object sender, EventArgs e) { // 确保lblGrandTotal已完成赋值后再跳转 if(!string.IsNullOrEmpty(lblGrandTotal.Text)) { // 加UrlEncode避免内容含特殊字符时解析错误 Response.Redirect("Checkout.aspx?id=" + Server.UrlEncode(lblGrandTotal.Text)); } }
2. 修正Checkout.aspx.cs的接收逻辑
增加空值判断,避免直接访问页面时报空引用错误:
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { if(Request.QueryString["id"] != null) { lblGrandTotal2.Text = Server.UrlDecode(Request.QueryString["id"]); } else { // 可选:无参数时的默认提示 lblGrandTotal2.Text = "未获取到订单金额"; } } }
可选更稳妥方案:Session存储传递
如果金额属于敏感数据,或者需要避免用户手动修改地址栏参数,可以改用Session存储传递:
Order.aspx.cs跳转代码
protected void btn_Payment_Click(object sender, EventArgs e) { if(!string.IsNullOrEmpty(lblGrandTotal.Text)) { Session["GrandTotal"] = lblGrandTotal.Text; Response.Redirect("Checkout.aspx"); } }
Checkout.aspx.cs接收代码
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { if(Session["GrandTotal"] != null) { lblGrandTotal2.Text = Session["GrandTotal"].ToString(); // 用完可清空Session避免数据残留 Session.Remove("GrandTotal"); } else { lblGrandTotal2.Text = "未获取到订单金额"; } } }
注意事项
确保点击Payment按钮之前,已经触发过Button1_Click1事件完成lblGrandTotal的赋值,否则传递的内容会为空。
内容的提问来源于stack exchange,提问作者Nelly Moh
相关产品推荐
相关产品推荐

