[英]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.