0

ポストバックを回避するために、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);
});
4

4 に答える 4

3

いいえ、サーバー側のコードと JavaScript を混在させることはできません。

解析は、クライアントに渡される前にサーバーで行われます。

何らかの理由でサーバー上でクライアント ID を使用する場合は、次を使用します。

ClientIDMode="Static"

例えば:

<asp:TextBox ID="txtIDNumber" runat="server" ClientIDMode="Static" /> 
于 2012-12-27T00:13:19.777 に答える
2

ASP の仕組みについて混乱していると思います。それが<% anything %>サーバー上で評価されると、何かがクライアント/ブラウザーに到達する前に。ページが評価されると、評価されたバージョンのページがクライアントに送信されます。そこから<% anything %>先は完全に無意味です。

これを踏まえて、世界中のすべての ASP を JS に投入してもまったく役に立たない理由を理解していただければ幸いです。JS コードが関与する頃には、すでに「遅すぎます」。

データをサーバーに送り返す場合は、次の 2 つのオプションがあります。

1) 従来の HTML フォーム

2) AJAX リクエスト

どちらにも長所と短所があり、どちらもサーバーに送信ポイントを作成する必要がありますが、詳細を説明することはこの回答の範囲を超えています。フォーム送信の処理と ASP での AJAX 要求の処理について読んでおくと、多くの資料が利用できるはずです。

于 2012-12-27T00:13:13.833 に答える
0

サーバー側の「要素」にjavascriptを渡すことはできませんが、コードを次のように変更しないでください。

$('#<%= txtIDNumber.ClientID %>').change(function(){

    var lblName = $('#<%= lblName.ClientID %>');

    <%If NameCollection.ContainsKey(txtIDNumber.ClientID) Then %>
        lblName.html('<%=NameCollection(txtIDNumber.ClientID)%>');
    <%Else%>
        lblName.html('<span class="error">Not a User</span>');
    <%End If %>
});
于 2012-12-27T00:16:39.993 に答える
0

ここで必要なことを行う唯一の方法は、Ajax またはフォームを使用することです。

$('#<%= txtIDNumber.ClientID %>').change(function(){
    var idNumber = $('#<%= txtIDNumber.ClientID %>').val();
    var lblName = $('#<%= lblName.ClientID %>');

    $.ajax({
       "url": "YourServerURLHere",  
       "data":{
           "idNumber":idNumber
       },
       "success": function(data)
       {
          lblName.text(data);
       }
    });
});
于 2012-12-27T00:18:32.710 に答える