【问题标题】:Is this the intended behavior of textbox and label?这是文本框和标签的预期行为吗?
【发布时间】:2011-11-09 04:08:26
【问题描述】:

我在 DOM 加载时设置控件的值。我在 aspx 页面上有这个超级简单的代码:

 <script type="text/javascript">
        $(document).ready(function () {
            $('#<%=textBox2.ClientID %>').val($('#<%=textBox1.ClientID %>').val());
            $('#<%=lblVal.ClientID %>').html($('#<%=textBox1.ClientID %>').val());

        });
    </script>

        <asp:TextBox runat="server" ID="textBox1" Text="Test data" />
        <asp:TextBox runat="server" ID="textBox2" />
        <asp:Label runat="server" ID="lblVal" Text="Old Data" />
        <asp:Button runat="server" Text="Click Me" onclick="Unnamed1_Click" />

在我的按钮单击事件处理程序中,我有以下代码:

protected void Unnamed1_Click(object sender, EventArgs e)
    {
        Debug.Write(textBox2.Text);
        Debug.Write(lblVal.Text);
    }

令我震惊的事情 lblVal 具有它的旧值。在 javascript 中设置值实际上对标签没有任何影响,而 textbox2 的数据反映在服务器上。文本框和标签的预期行为是什么?这让我有点惊讶,因为我以前从未遇到过这个东西。

【问题讨论】:

  • 不,他们应该保留自己的价值;我用 JS 更改了文本框和隐藏字段的值,然后它回传到服务器 OK....
  • @Brian:我不是在谈论隐藏字段。您可以更改标签的值并尝试一下。

标签: c# asp.net webforms


【解决方案1】:

标签将呈现为 HTML label 标记,而不是表单字段。因此它没有提交表单时发布的值,并且您在回发中恢复的值来自 ViewState。表单字段(例如,变成 input 的 ASP 文本框)将发布它们的值,这将覆盖视图状态中的值。

您可以通过使用 javascript 更新的隐藏输入来解决此问题,然后在您的回发中使用其内容更新标签。

【讨论】:

  • 实际上,在我的公司中,我正在开发一种支付系统,其中要收取的总金额存储在标签中。所以我只是在检查我是否可以破解它并继续通过 Firebug 更改值,但令我惊讶的是,旧值只收费:p。我无法破解系统。
【解决方案2】:

asp:Label 控件呈现为 span,因此不是表单元素,其更改的内容不会发布到服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多