0

このようなマークアップでカスタム属性を設定しています..

<asp:TextBox runat="server" guid="" ID="txtlocation1" type="text" class="autocomplete short-field require" name="location1" autocomplete="off" datasource="locations" />

Javascriptはその値を設定し、このようにボタンクリックで値を読み取ろうとしています...

var val = txtlocation1.Attributes["guid"];

私はいつも空の文字列を取得します..何かアイデアはありますか? PS: コードで属性を設定していません。

4

3 に答える 3

2

属性は ViewState に保持されるため、空の文字列が ViewState に追加されます。Text (または value) プロパティのみがサーバーにポストバックされるため、クライアントで属性を設定しても影響はありません。コントロールがサーバー側で再作成され、ViewState が再適用されて、GUID 属性が再び空の文字列になります。

非表示のフォーム フィールドを GUID に設定するだけでよいと思います。ボタンをクリックすると、正しい値でサーバー側で使用できるようになります。

于 2012-07-03T18:04:06.160 に答える
2

Textbox は、認識できない属性をクライアントに直接プッシュします。これは IAttributeAccessor インターフェイスの機能です。ただし、それらはサーバーに送り返されません。テキストボックスは、その値のプロパティのみをサーバーにポスト バックします。<asp:HiddenField />コントロールを使用するか<input type="hidden" />、それらをサーバーにポストバックします。次に、隠しフィールドから変更された値を読み取ることができます。

于 2012-07-03T18:06:25.320 に答える
1

カスタム属性はサーバーに送り返されません...代わりに HiddenFeild コントロールを使用してデータを保持し、javascript で変更すると、サーバー上で更新された値が読み取られます。

于 2012-07-03T18:05:14.663 に答える