在服务器端无法访问客户端上的标签文本更改

时间:2017-08-22 14:33:45

标签: javascript asp.net webforms

我有以下标题标签

Billed Amount:
<label >$</label>
<asp:Label ID="billed"  runat="server" Text="0.00"></asp:Label>

此外,我还有一个带有文字输入的儿童中继器,如下所示

 <asp:Repeater runat="server" ID="rpt" >
     <HeaderTemplate>
         ....
     </HeaderTemplate>
     <ItemTemplate>
         <asp:TextBox ID="txtB" onchange="AmountChanged(this)" Text='<%# Bind("Billed") %>' />
     </ItemTemplate>
     <FooterTemplate>
         </table>
     </FooterTemplate>
 </asp:Repeater>

在AmountChanged JavaScript函数中,我已写入汇总所有转发器项目的帐单金额并更改标题上的值

但是当我获得标签值时,它仅作为之前的值出现。 JavaScript更改在服务器端无效。

2 个答案:

答案 0 :(得分:1)

最简单的方法是添加 HiddenField 。每当您为billed标签指定值时,您也会将其分配给BilledHiddenField HiddenField。

然后,您可以在服务器端而不是BilledHiddenField.Value阅读billed.Text

<asp:Label ID="billed"  runat="server" Text="0.00"></asp:Label>
<asp:HiddenField id="BilledHiddenField" runat="server" />

答案 1 :(得分:0)

标签不会在回发中持续存在。解决这个问题的一个好方法是重新计算负载总量:

我们可以添加一些data-属性,以便我们轻松识别元素

<asp:Label data-billed="" runat="server" ID="billed"></asp:Label>
<asp:TextBox runat="server" ID="txtB" data-amount="" Text='<%# Eval("Billed") %>'></asp:TextBox>

然后计算负载总数:

var amount = 0;

$("[data-amount]").each(function (index, el) {
    if ($(el).val()) {
        amount += parseInt($(el).val(), 10);
    }
});

$("[data-billed]").text(amount);