簡體   English   中英

在Javascript讀C#字典

[英]Reading C# dictionary in Javascript

我在 C# (ASP.NET) 中有一個字典變量。 我想將此數據發送到 Javascript。我正在使用此代碼將其序列化並發送到 javascript。

Dictionary<string, string> chat;
chat = new Dictionary<string, string>();

chat.Add("Sam", "How are you?");
chat.Add("Rita", "I am good");
var serialize = new System.Web.Script.Serialization.JavaScriptSerializer();

Response.Write(serialize.Serialize(chat));

在 Javascript 頁面上,我用這個調用這個頁面;

 $.ajax({
 url: "TextChatCalls/getChat.aspx",
 type: "POST",
 context: document.body,
 success: function (response) {
          var Chats = response.split('\n')[0];
          alert(Chats);

          }
 });

Chats var 中的值是{"Sam":"How are you?","Rita":"I am good"}

我不知道如何在聊天中讀取此值。 我可以無論如何將其轉換為二維數組並將其讀取為數組 [0][0]、數組[1][0] 等嗎?

謝謝。

編輯:另一個令人困惑的是,從 ASP.NET 返回的響應 object 包含

{"Sam":"How are you?","Rita":"I am good"}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="getChat.aspx?Id=141755" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZJctiKZK4rXVndR3mbGssIarCrOF" />
</div>

    <div>

    </div>
    </form>
</body>
</html>

而不僅僅是預期{"Sam":"How are you?","Rita":"I am good"} 因此,我必須將響應 object 拆分為var Chats = response.split('\n')[0]; 這使它成為一個字符串!

你讀的是這樣的:

alert(Chats["Sam"]);

(就像一個C#字典:-)。 你使用Chats["propertyName"]類的東西讀/寫它

或者,遍歷每個值:

for (var c in Chats)
{
    if (Chats.hasOwnProperty(c)) 
    {
        alert(c + '   ' + Chats[c]);
    }
}

請注意,這與C#不同。 在C#中, c將包含一個包含鍵和值的KeyValuePair<> 在Javascript中c只是關鍵,要獲得你必須使用Chats[c]

hasOwnProperty的推理在這里http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

現在......如果你真的想分開它:

var array = [];

for (var c in Chats)
{
    if (Chats.hasOwnProperty(c)) 
    {
        array.push([c, Chats[c]]);
    }
}

只需將數據類型json添加到您的ajax請求中即可

$.ajax({
 url: "TextChatCalls/getChat.aspx",
 type: "POST",
 dataType: "json"
 context: document.body,
 success: function (response) {
          // do something with response
 });

這將使response成為您可以像這樣訪問的javascript對象

alert(response["sam"]) //How are you?

將其拆分為二維數組就可以了

var Chats = [];
for ( k in response ){
  Chats[Chats.length] = [k, response[k]];
}

我想這里重要的一點是你正確理解了JavaScript客戶端的情況。 到達JavaScript客戶端的數據類型是JSON字符串。 JSON(= JavaScript Object Notation)可以直接由JavaScript解釋。

JavaScript對象如下所示:

var anObject = { name: "Sam", surname: "abc"};

您可以通過類似於字典的方式訪問JavaScript對象的屬性

anObject["name"] //will get "Sam"

或直接(財產符號)

anObject.name

相反,類似的JSON字符串看起來像

var aJsonString = '{ "name": "Sam", "surname": "abc"}'

現在要將JSON字符串轉換為JavaScript對象,您需要解析它。 jQuery已經為你做了這個,否則你可以調用JSON.parse(aJsonString) ,你將得到一個有效的JavaScript對象。

在這里我做了一個簡單的例子: http//jsbin.com/adejev/2/edit

對於 ASP.NET Core,我在cshtml文件中使用了它。 基本上我將整個字典重建為 Javascript。采用這種方法的原因是因為我在 Javascript 中有子函數,它們將無法調用服務器 model 函數,並在按鍵等事件上使用動態參數。

var ModelZxcvWarnLookup = {};
@foreach (var kvp in Model.View.ZxcvbnWarningMsgLocalization)
{
    @:ModelZxcvWarnLookup['@Html.Raw(@kvp.Key)'] = '@Html.Raw(@kvp.Value)';
}

檢查瀏覽器獲取的 html 頁面:

var ModelZxcvWarnLookup = {};
ModelZxcvWarnLookup["Straight rows of keys are easy to guess"] = "Chinese Straight rows of keys are easy to guess";
ModelZxcvWarnLookup["Short keyboard patterns are easy to guess"] = "Chinese Short keyboard patterns are easy to guess";
ModelZxcvWarnLookup['Repeats like "aaa" are easy to guess'] = 'Repeats like "aaa" are easy to guess';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM