【问题标题】:Calculate total on TextBox's TextChanged() event in asp.Net在 asp.Net 中计算 TextBox 的 TextChanged() 事件的总数
【发布时间】:2014-05-24 11:55:53
【问题描述】:

我有一个如下的小应用程序。

在此材料费率和采购订单总计是只读字段。我想通过公式(Total=Rate*Qty)根据材料数量的变化来计算总数。

我在 Material Quantity 的 TextChanged() 上编码,并将 AuotoPostBack 更改为 True

我试过的代码如下:

protected void txtMQty_TextChanged(object sender, EventArgs e)
{
 checkTotal();
}

//I am saving Rate in ViewState["Rate"] and retrieving here.
private void checkTotal()
{
 Rate = Convert.ToInt32(ViewState["Rate"]);
 txtMQty.Text = string.Empty;
 if (Rate > 0 && txtMQty.Text == string.Empty)
 {
  txtMRate.Text = Rate.ToString();
  txtTotal.Text = Rate.ToString();
 }
 Regex reg = new Regex("[^0-9]+$");
 var str = txtMQty.Text.ToString();
 str = reg.Replace(str, string.Empty);
 if (str.Length > 0)
 {
 var qty = Convert.ToInt32(txtMQty.Text.ToString());
 int total = (Rate* qty);
 txtTotal.Text = total.ToString();
 }
 }

我也在使用 UpdatePanel 来避免往返。我的问题是当我输入 Quantity txtMQty's TextChaged() 事件应该触发但它没有触发。不明白怎么回事。

我的 .aspx 页面如下。

<tr>
        <td class="auto-style3">
            Material Quantity</td>
        <td class="auto-style4">
            <asp:TextBox ID="txtMQty" runat="server" Width="87px" AutoPostBack="True" OnTextChanged="txtMQty_TextChanged"></asp:TextBox></td>
        <td>
            <asp:RequiredFieldValidator ID="RFVMQty" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide Material Quantity" ValidationGroup="CreateVal"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="REVMQty" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide proper Quantity in number format" ValidationExpression="^\d+$" ValidationGroup="CreateVal"></asp:RegularExpressionValidator>
        </td>
    </tr>
    <tr>
 <tr>
        <td class="auto-style3">Material Rate</td>
        <td class="auto-style4">
            <asp:UpdatePanel ID="UpdateRate" runat="server">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="txtMQty" EventName="TextChanged" />
                </Triggers>
                <ContentTemplate>
            <asp:TextBox ID="txtMRate" runat="server" Width="87px" ReadOnly="True"></asp:TextBox>
                    </ContentTemplate>
        </asp:UpdatePanel>
                    </td>
        <td></td>
    </tr>
    <tr>
        <td>
            PO Total
        </td>
        <td class="auto-style4">
            <asp:UpdatePanel ID="UpdateTotal" runat="server">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="txtMQty" EventName="TextChanged" />
                </Triggers>
                <ContentTemplate>
            <asp:TextBox ID="txtTotal" runat="server" Width="87px" ReadOnly="True"></asp:TextBox>
                    </ContentTemplate>
        </asp:UpdatePanel>
        </td>
    </tr>
    <tr>

【问题讨论】:

  • 在更新面板中使用触发器并为 event=TextChanged 触发
  • 为什么要使用updatePanel?为什么要把 txtMQty 设为空?
  • @KrunalPatil 我使用了触发器。
  • @AbdurRahim 我使用了 updatepanel,因为我不希望每次文本更改都往返于服务器。
  • 检查我的新答案。我希望这能解决您的问题。

标签: c# asp.net updatepanel autopostback


【解决方案1】:

这是你的问题:

您正在使用多个更新面板。并尝试触发不在更新面板中的文本框。触发器在更新面板中找到控件,然后进行回发。但是您的 txtMQty 不在更新面板中。所以触发器不起作用。

如果您使用单个更新面板,您的问题将得到解决。请检查下面给出的我的代码。这对你有用。

<asp:updatepanel id="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="txtMQty" EventName="TextChanged" />
    </Triggers>
    <ContentTemplate>
        Material Quantity
        <asp:TextBox ID="TextBox1" runat="server" Width="87px" AutoPostBack="True" OnTextChanged="txtMQty_TextChanged"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide Material Quantity" ValidationGroup="CreateVal"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide proper Quantity in number format" ValidationExpression="^\d+$" ValidationGroup="CreateVal"></asp:RegularExpressionValidator>
        <br />
        <br />
        Material Rate
        <asp:TextBox ID="TextBox2" runat="server" Width="87px" ReadOnly="True" >5</asp:TextBox>
        <br />
        <br />
        PO Total
        <asp:TextBox ID="TextBox3" runat="server" Width="87px" ReadOnly="True"></asp:TextBox>
    </ContentTemplate>
</asp:updatepanel>

这是一个工作的 html 设计器。

【讨论】:

    【解决方案2】:

    您需要在导致事件的文本框上启用 AutoPostBack。

    <asp:TextBox ID="txtMQty" runat="server" AutoPostBack="True"></asp:TextBox> 
    

    编辑:
    对不起,您还需要分配事件:

    <asp:TextBox ID="txtMQty" runat="server" AutoPostBack="True" OnTextChanged="TextBox1_TextChanged"></asp:TextBox> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多