2

私はhtml要素を持っています:

<div id="myElement" class="someClass" onclick="setText(this.innerHtml)" runat="server">text</div>

次のようなjqueryを使用して、クライアント側でこの要素を変更できるようにしたいと思います。

function setText(text) {            
    $(".someClass").text(text);
}

- また -

function setAttribute(text) {            
    $(".someClass").attr("myAttr",text);
}

これを実行したら、この要素の新しいテキストまたは新しい属性を取得して、またはサーバー側のいずれかの値を格納します。次に、LinkBut​​tonを使用してサーバーにポストバックすることに注意してください。この時点で、要素を見ると、デフォルトのテキストがまだ存在しているか、追加した新しい属性が欠落しています。

誰かが要素がサーバー上で更新されない理由と、私もそれを取得する方法を説明できますか?

4

3 に答える 3

1

このメソッドは機能しますが、変更する要素のタイプと属性のタイプによって異なります。すべてのコントロールは、リクエストごとに再作成されることを覚えていますか?ボタンイベントの情報を正確に引き出すことができる唯一の理由は、asp.netがLoadViewStateイベントの要求(またはビューステート)からデータをプルし、コントロールのデフォルト値をこのデータに置き換えたためです。

div要素がサーバーサイドパネルコントロール(これはdiv要素をレンダリングするasp.netコントロールです)でない場合、それは機能しません。それをパネルコントロールにすると、これがPage.Request(特に属性)で渡されるかどうかさえ100%確信できません。

私が行うことは、div要素で変更した値を、サーバー側で簡単にアクセスできる非表示のフィールドにコピーし、そこでこの新しい属性フォームを取得することです。

于 2012-04-24T17:50:21.587 に答える
1

あなたが直面している問題は、使用しているhtml要素のタイプであるdivが原因であると思います。divを「text」タイプの入力に置き換えるだけで、期待どおりに機能し、ポストバックで値を読み取ることができます。フォームの送信/ポストバック中には、フォーム要素のみが送信されます。

この例は、WebベースのWYSIWYGテキストエディタがどのように機能するかです。divで入力して編集しますが、バックグラウンドで行ったすべての変更は非表示フィールドに保存されます。この非表示フィールドは、情報をサーバーにポストバックするために使用されます。

于 2012-04-24T17:52:55.037 に答える
0

属性は、まったくのようにサーバーに投稿されません(値、スナーク以外)。アイテムの名前/値のペアのみが、(従来のWebフォームを使用していると仮定して)ビューステートに含まれるデータです。

このようなアイテムを変更してサーバーにアクセスする場合は、このデータをクエリ文字列に投稿するか、キーと値のペアとして投稿する必要があります(サーバーオブジェクトに設定する必要があります)。

そうでなければ、これは不可能です。

于 2012-04-24T17:50:00.717 に答える