这是文本框和标签的预期行为吗?

时间:2011-09-02 13:00:48

标签: c# asp.net webforms

我在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的数据反映在服务器上。文本框和标签的预期行为是什么?这对我来说有点意外,因为我之前从未遇到过这件事。

2 个答案:

答案 0 :(得分:2)

标签将呈现为HTML label标记,而不是表单字段。因此,它没有提交表单时发布的值,并且在回发中恢复的值来自ViewState。表单字段(例如,成为input的ASP TextBox)将发布其值,这将覆盖viewstate中的值。

你可以通过使用javascript更新隐藏的输入来解决这个问题,然后在你的回发中更新带有内容的标签。

答案 1 :(得分:0)

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