【问题标题】:How can I get the lblmessage to display only if Confirm button is clicked before Calculate button?只有在计算按钮之前单击确认按钮时,如何才能显示 lblmessage?
【发布时间】:2017-09-18 14:09:44
【问题描述】:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Confirm.aspx.cs" Inherits="XEx04Quotation.Confirm" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Confirm quotation</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="Scripts/jquery-1.9.1.min.js"></script>
    <script src="Scripts/bootstrap.min.js"></script>
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
    <link href="Content/site.css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server" class="form-horizontal">

        <main class="container">

            <h1 class="jumbotron">Quotation confirmation</h1>

            <div class="form-group">
                <label class="col-sm-3 control-label">Sales price</label>
                <asp:Label ID="lblSalesPrice" runat="server" CssClass="col-sm-3 bold"></asp:Label>
            </div>

            <div class="form-group">
                <label class="col-sm-3 control-label">Discount amount</label>
                <asp:Label ID="lblDiscountAmount" runat="server" CssClass="col-sm-3 bold"></asp:Label>
            </div>

            <div class="form-group">
                <label class="col-sm-3 control-label">Total price</label>
                <asp:Label ID="lblTotalPrice" runat="server" CssClass="col-sm-3 bold"></asp:Label>
            </div> 

            <div class="row">
                <h3 class="col-sm-offset-2 col-sm-10">Send confirmation to</h3>
            </div>
            
            <div class="form-group">
                <label class="col-sm-3 control-label">Name</label>
                <div class="col-sm-3">
                    <asp:TextBox ID="txtName" runat="server" CssClass="form-control"></asp:TextBox>
                </div>
                <div class="col-sm-6">
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtName" 
                        Display="Dynamic" ErrorMessage="Required" CssClass="text-danger"></asp:RequiredFieldValidator>
                </div>  
            </div>  
            
            <div class="form-group">
                <label class="col-sm-3 control-label">Email address</label>
                <div class="col-sm-3">
                    <asp:TextBox ID="txtEmail" runat="server" CssClass="form-control"></asp:TextBox>
                </div>
                <div class="col-sm-6">
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtEmail" 
                        Display="Dynamic" ErrorMessage="Required" CssClass="text-danger"></asp:RequiredFieldValidator>
                </div>  
            </div>  

            <%-- Quotation and Return buttons --%>
            <div class="form-group">
                <div class="col-sm-offset-3 col-sm-9">
                    <%-- buttons go here --%>
                    <asp:Button ID="Button1" runat="server" Text="Send Quotation"  CssClass="btn btn-primary"/>
                    <asp:Button ID="Button2" runat="server" Text="Return" CssClass="btn btn-primary" PostBackUrl="~/Default.aspx" CausesValidation="false"/>
                </div>
            </div> 
            
            <%-- message label --%>
            <div class="form-group">
                <div class="col-sm-offset-1 col-sm-11">
                    <%-- message label goes here --%>
                    <asp:Label ID="lblmessage" runat="server" Text="Click the Send Quotation button to send the quotation via email" CssClass="text-info"></asp:Label>
                </div>
            </div>

        </main>

    </form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace XEx04Quotation
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
        }

        protected void btnCalculate_Click(object sender, EventArgs e)
        {
            if (IsValid)
            {
                decimal salesPrice = Convert.ToDecimal(txtSalesPrice.Text);

                // save the salesPrice into a session state variable 
                Session["SalesPrice"] = salesPrice;


                decimal discountPercent = Convert.ToDecimal(txtDiscountPercent.Text) / 100;

    
                decimal discountAmount = salesPrice * discountPercent;

                // save the discountAmount into a session state variable
                Session["Discount"] = discountAmount;

                
                decimal totalPrice = salesPrice - discountAmount;

                // save the totalPrice into a session state variable

                Session["TotalPrice"] = totalPrice;

                lblDiscountAmount.Text = discountAmount.ToString("c");
                lblTotalPrice.Text = totalPrice.ToString("c");
            }   
        }

        protected void Button1_Confirm(object sender, EventArgs e)
        {
             if(Session["SalesPrice"] != null)
            {
                Response.Redirect("Confirm.aspx");
            }
            else 
            {
                // This is the part I am concerned about
                lblmessage2.Text = "Click the Calculate button before you click confirm";
            }
            


        }
    }
}

大家好,

我正在使用 Default.aspx、Default.aspx.cs 以及 Confirm.aspx 和 Confirm.aspx.cs 构建多 Web 应用程序页面。我遇到的问题是,当我在单击“计算”之前单击“确认”时,事件处理程序会在页面底部显示“在确认之前单击计算按钮”。即使在确认之前单击计算按钮并且在我重新加载页面时也会再次显示,它也会这样做。 如果 SalesPrice 的会话状态值为 null,我怎样才能让它只显示?否则,它会重定向到确认页面。 这是 Default.aspx.cs 和其他文件:

【问题讨论】:

  • 只定义你的代码不工作而不是整个应用程序。
  • @Asif.Ali 你只希望我包含 Confirm.aspx 和 Confirm.aspx.cs 文件吗?
  • @Asif.Ali 你看到更新了吗?

标签: c# asp.net webforms


【解决方案1】:

你可以做一件事。如果您想先得到总计算,则禁用确认按钮,点击计算按钮将启用按钮,如下所示:

<asp:Button ID="Button1" runat="server" Enabled="false" />

protected void btnCalculate_Click(object sender, EventArgs e)
{
   Button1.Enabled = True;

   if(Session["TotalPrice"] != null)
   {
       lblMsg.Text = "Please click here to see total calculation";
   }
}

protected void Button1_Confirm(object sender, EventArgs e)
{
   if(Session["SalesPrice"] != null)
   {
       Response.Redirect("Confirm.aspx");
   }
}

注意:请遵循事件名称的命名约定。 Button1btnConfirm

更新 1 - 试试下面的测试代码:

<asp:Button ID="btnCalculate" runat="server" Text="Calculate" OnClick="btnCalculate_Click" />

<asp:Button ID="btnConfirm" runat="server" Text="Confirm" OnClick="btnConfirm_Click" />

<asp:Label ID="lblMsg" runat="server"></asp:Label>


private int buttonWasClicked = 0; //Kept a variable type of int and with a default value 0

protected void btnCalculate_Click(object sender, EventArgs e)
{
   buttonWasClicked = 1; //If clicked, then 1
   Session["value"] = Convert.ToInt32(buttonWasClicked); //Then kept in session

   lblMsg.Text = "Total Price - 10,000";
}

protected void btnConfirm_Click(object sender, EventArgs e)
{
   if (Session["value"] != null) //If session not null, then redirect page
   {
      Response.Redirect("CustomerDetails.aspx");
      Session["value"] = null; //Clears the session
   }
   else
   {
      lblMsg.Text = "Click the calculate button first";
   }
}

【讨论】:

  • -如何将我想要的消息“在确认之前单击计算按钮”放在 btnCalculate_Click() 事件处理程序中?
  • 你要发什么信息?
  • "在确认前点击计算按钮。"
  • 我通过Label 提供了一个示例。我猜,如果 Session['TotalPrice'] 默认不为空,你可以在计算按钮中显示它。
  • @AT-2017-你在吗?感谢您为帮助我解决问题所做的贡献,但我只想知道您是否显示我的消息可以插入的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
相关资源
最近更新 更多