0

当我<%= this.HiddenField.Value %>在这种情况下调用 HiddenField 控件的值时保持相同的状态 (5) ?但是当我用console.log(document.getElementById('<%= this.HiddenField.ClientID %>').value);这个来调用它时,在这种情况下“活动”返回改变的状态,为什么?如何在后面的代码中获取更改的值(我想<%= this.HiddenField.Value %>返回“活动”(更改的值))?

代码:

<script>
    $(function () {
        document.getElementById('<%= this.HiddenField.ClientID %>').value = "active";
        console.log(document.getElementById('<%= this.HiddenField.ClientID %>').value); // this return te changed value "active"
        console.log('<%= this.HiddenField.Value %>') //this again is 5 not "active"
    });
</script>
<asp:HiddenField ID="HiddenField" runat="server" Value="5" />
4

5 回答 5

3

您混淆了服务器端和客户端代码以及它们何时运行。

服务器端代码首先运行。这就是<%=%>块中的内容。其中,在使用时this.HiddenField.Value,它将输出控件在客户端更改之前的服务器端值。this.HiddenField.ClientID将控件 ID 输出为服务器的输出,以便您可以从客户端代码中获取它。

当页面首次加载时,这些<%=%>部分将被替换为服务器端的值。

这看起来像(在页面加载后在浏览器中执行 - 查看源代码以查看实际呈现给浏览器的内容):

<script>
    $(function () {
        document.getElementById('someId').value = "active";
        console.log(document.getElementById('someId').value); // this return te changed value "active"
        console.log('5') //this again is 5 not "active"
    });
</script>
<input type="HiddenField" ID="someId" Value="5" />

然后,并且只有这样,客户端代码才会运行,并显示您所看到的结果。

于 2013-02-20T11:36:18.863 回答
1

在下一行

 console.log('<%= this.HiddenField.Value %>')

<%= this.HiddenField.Value %>在服务器上进行评估,因此在浏览器中

console.log('5')

因为那是表达式的值。

于 2013-02-20T11:36:18.100 回答
0

<%= whatever %>评估whatever页面何时在服务器上呈现。

如果您查看发送给客户端的 HTML,您会发现类似

$(function () {
    document.getElementById('blahblah_HiddenField').value = "active";
    console.log(document.getElementById('blahblah_HiddenField').value);
    console.log('5')
});

5服务器呈现 - 客户端没有任何内容将其链接5到隐藏字段中的值,因此当隐藏字段的值更改时它不会更新。

于 2013-02-20T11:36:09.503 回答
0

发生这种情况是因为 asp.net 控件显示“服务器”值,即 5。使用 javascript,您正在修改客户端的 dom,asp.net 控件值在您发布页面之前不会改变。

于 2013-02-20T11:37:20.407 回答
0

或者您可以使用 ClientIDMode

<asp:HiddenField ID="HiddenField1" runat="server" ClientIDMode="Static" />

设置和获取;

在jQuery中

$('#HiddenField1').val('active');
console.log($('#HiddenField1').val());

在javascript中

document.getElementById('HiddenField1').value = 'active';
console.log(document.getElementById('HiddenField1').value);
于 2013-02-20T11:41:48.490 回答