ASP.NET WebForm中JavaScript修改了頁面上Label的值,如何在后台代碼中獲取


在用ASP.NET WebForm開發一個項目時,遇到如下的一個情況

頁面上有一個Textbox控件,還有2個Label 控件. 當Textbox控件中的值更改時,兩個Label控件上的值做相應的更改, 這一點是通過頁面中嵌入的JavaScript來實現的.

但是,Label控件上的值更改后,在后端.cs代碼中,通過Label.Text 並不能取到更改后的值。 

order.aspx頁面代碼如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="order.aspx.cs" Inherits="order"   %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Order</title>
</head>
  <body>
    <form id="orderForm" runat="server">
      <div class="form-group">
            <label>Product Size</label>
             <asp:TextBox ID="productSize" runat="server" Text="" CssClass="form-control" type="number" onchange="calculateNumberOfPacks()" ></asp:TextBox>
          </div>
          <div class="row">
            <div class="col-md-6">
              <p>Number of 96 packs:&nbsp;&nbsp;
                 <asp:Label ID="lbl96Pack" runat="server"></asp:Label>
                </p>
            </div>
            <div class="col-md-6">
              <p>Number of 24 packs:&nbsp;&nbsp;
                 <asp:Label ID="lbl24Pack" runat="server"></asp:Label>
                </p>
            </div>
          </div>
        <div class="well">
            <asp:Button ID="submit" CssClass="btn btn-primary" runat="server" Text="Place Order" OnClick="submit_Click"  />
        </div>
          </form>


  </body>
    <script>
        //also do this on document load
        //capture the value of the herd size input
        window.onload = function () {
            calculateNumberOfPacks();
        }

        function calculateNumberOfPacks(){
            var productSize = document.getElementById('productSize').value;
            var largePacks = 0;
            var smallPacks;

            //multiply it by 1.10
            productSize = productSize * 1.1;

            //Round it upwards
            productSize = Math.ceil(productSize);
            console.log(productSize);

            //work out how many packs are required. 
            largePacks = Math.floor((productSize / 96));
            console.log("Large Packs: " + largePacks);
            smallPacks = Math.ceil((productSize - (largePacks * 96)) / 24);
            console.log("Small Packs: " + smallPacks);

            //Now inject the value back into the dom
            document.getElementById('lbl96Pack').innerHTML = largePacks;
            document.getElementById('lbl24Pack').innerHTML = smallPacks;
           }        
    </script>
</html>

 

頁面如上面,當Textbox中的值由200改為其他值,下面的兩個Label的值也會跟着更改

但是,在order.aspx.cs 后台代碼中,如下獲取:

this.lbl96Pack.Text , this.lbl24Pack.Text 來獲取Lable的值,發現獲取不到更新后的值.

原因:

你在ASPX頁面上用javascript來更新了服務器端控件Label上的值,你需要回發才能使你的服務器端代碼來反映這些更改.

解決方法:

創建兩個隱藏的客戶端控件<input>控件,把更新后的Label的兩個值,同時使用JavaScript來更新到這兩個隱藏的客戶端控件上。在order.aspx.cs后台代碼中,直接獲取這兩個隱藏的客戶端控件的value

修改后的order.aspx 代碼如下:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="order.aspx.cs" Inherits="order"   %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Order</title>
</head>
  <body>
    <form id="orderForm" runat="server">
      <div class="form-group">
            <label>Product Size</label>
             <asp:TextBox ID="productSize" runat="server" Text="" CssClass="form-control" type="number" onchange="calculateNumberOfPacks()" ></asp:TextBox>
          </div>
          <div class="row">
            <div class="col-md-6">
              <p>Number of 96 packs:&nbsp;&nbsp;
                 <asp:Label ID="lbl96Pack" runat="server"></asp:Label>
                 <input type="hidden" name="hidden96Pack" id="hidden96Pack" value="">
                </p>
            </div>
            <div class="col-md-6">
              <p>Number of 24 packs:&nbsp;&nbsp;
                 <asp:Label ID="lbl24Pack" runat="server"></asp:Label>
                 <input type="hidden" name="hidden24Pack" id="hidden24Pack" value="">
                </p>
            </div>
          </div>
        <div class="well">
            <asp:Button ID="submit" CssClass="btn btn-primary" runat="server" Text="Place Order" OnClick="submit_Click"  />
        </div>
          </form>


  </body>
    <script>
        //also do this on document load
        //capture the value of the herd size input
        window.onload = function () {
            calculateNumberOfPacks();
        }

        function calculateNumberOfPacks(){
            var productSize = document.getElementById('productSize').value;
            var largePacks = 0;
            var smallPacks;

            //multiply it by 1.10
            productSize = productSize * 1.1;

            //Round it upwards
            productSize = Math.ceil(productSize);
            console.log(productSize);

            //work out how many packs are required. 
            largePacks = Math.floor((productSize / 96));
            console.log("Large Packs: " + largePacks);
            smallPacks = Math.ceil((productSize - (largePacks * 96)) / 24);
            console.log("Small Packs: " + smallPacks);

            //Now inject the value back into the dom
            document.getElementById('lbl96Pack').innerHTML = largePacks;
            document.getElementById('lbl24Pack').innerHTML = smallPacks;

            document.getElementById('hidden96Pack').value = largePacks;
            document.getElementById('hidden24Pack').value = smallPacks;
           }        
    </script>
</html>

 

在order.aspx.cs代碼中,如下來獲取值

 protected void submit_Click(object sender, EventArgs e)
 {

    var Pack96 = Request.Form["hidden96Pack"].ToString().Trim();
     var Pack24 = Request.Form["hidden24Pack"].ToString().Trim();



}

 

這樣,就完成了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM