ポストバックを回避するために、JavaScript 変数をサーバー側タグに渡そうとしています。
ソリューションを次のようにしたいと思います。
コードビハインド:
Public Property NameCollection As Dictionary(Of String, String)
私がしたいJavaScript:
$('#<%= txtIDNumber.ClientID %>').change(function(){
var idNumber = $('#<%= txtIDNumber.ClientID %>').val();
var lblName = $('#<%= lblName.ClientID %>');
<%If NameCollection.ContainsKey(idNumber) Then %>
lblName.html('<%=NameCollection(idNumber)%>');
<%Else%>
lblName.html('<span class="error">Not a User</span>');
<%End If %>
});
これらのサーバー側タグは、idNumber (「1234」など) をハードコードすると正しく機能するため、オブジェクト/コード自体が正しく機能していることはわかっていますが、JavaScript 変数を認識/渡す方法はありますか?ここ?
追加情報: 機能的な回避策はありますが、コレクション内のすべてのアイテムをループする方法は醜くて非効率的です。手伝ってくれてありがとう。:)
明確化のために編集:
これが私の現在の回避策です。すべてのアイテムをループするのではなく、idnumber をインデックスとして使用する方法を理解できないため、非常に醜いです。NameCollection には、ASP.NET ページ読み込みイベントでデータが既に読み込まれているため、サーバー側のタグでバックグラウンドで何が起こっているのかはわかりませんが、データはそのオブジェクトに静的に存在する必要があると想定しました。サーバーへの最後の呼び出しで、しかしそのスナップショットそのデータのクライアント側に物理的に存在していた (ポストバックを避ける必要がありますよね?)? したがって、クライアント側にあるはずのデータにのみアクセスしているため、ここでサーバーと通信する必要はありませんか? 私は JavaScript や Web プログラミング全般の専門家ではなく、サーバー側タグに関する適切なリファレンスをほとんど見つけることができなかったので、間違っていたら訂正してください (よろしくお願いします)。
$('#<%= txtIDNumber.ClientID %>').change(function(){
var idnumber = $('#<%= txtIDNumber.ClientID %>').val();
var lblName = $('#<%= lblName.ClientID %>');
var tempJSKey = '';
var tempJSValue = '<span class="error">Not a Member</span>';
<%If Not NameCollection Is Nothing Then%>
<%For Each kvp As System.Collections.Generic.KeyValuePair(Of String, String) In NameCollection %>
tempJSKey = '<%=kvp.Key %>';
if (tempJSKey == idnumber)
{
tempJSValue = '<%=kvp.Value%>';
}
<%Next%>
<%End If%>
lblName.html(tempJSValue);
});