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値が出力されます。クライアント側のコードから取得できるように、サーバーによる出力としてコントロール ID を出力します。this.HiddenField.ClientID

ページが最初にロード<%=%>されると、セクションはサーバー側の値に置き換えられます。

これは次のようになります (ブラウザでページが読み込まれると、ソースを表示して実際にブラウザにレンダリングされたものを確認します):

<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

これは、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 に答える
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 に答える