如何将 Dictionary<string, string> 变量从后面的代码传递到 asp.net?
Posted
技术标签:
【中文标题】如何将 Dictionary<string, string> 变量从后面的代码传递到 asp.net?【英文标题】:How to pass Dictionary<string, string> variable from code behind to asp.net? 【发布时间】:2013-07-03 01:41:22 【问题描述】:我正在尝试将公共字典从 c# 传递到 asp.net。
这是我的代码:
代码背后:
public Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
RetrieveDataField();
void RetrieveDataField()
DataDefinitionResponse[] _dr = _service.DataDefinitionList(_companyID);
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Type");
foreach (DataDefinitionResponse dr in _dr)
if (dr.Type != "Group" && dr.Type != "File")
DataRow row = dt.NewRow();
row["Name"] = dr.Name;
row["Type"] = dr.Type;
dt.Rows.Add(row);
if (dr.Type == "Dropdown")
string[] strSplit = dr.ListValue.Split('|');
List<string> lst = new List<string>();
foreach (string word in strSplit)
lst.Add(word);
dict.Add(dr.Name, lst);
ddlFieldName.DataSource = dt;
ddlFieldName.DataTextField = "Name";
ddlFieldName.DataValueField = "Type";
ddlFieldName.DataBind();
平均售价:
<script type="text/javascript">
$(document).ready(function ()
alert(<%=dict%>); //Error here
$("#MainContent_ddlFieldName").live("change", function ()
$.ajax(
type: "POST",
url: "WebService/WebFunction.asmx/PopulateDropdown",
data: "'dict': '" + 'a' + "'",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data)
// data.d;
// $("#txtBLShipperContactNo").val(data.d);
alert(data.d);
,
error: function (XMLHttpRequest, textStatus, errorThrown)
alert("Error Shipper: " + errorThrown);
);
);
);
</script>
有什么想法吗?
【问题讨论】:
究竟产生了什么错误? 你能详细说明你想用 Dictionary 变量做什么吗? 【参考方案1】:当你使用<%=dict%>
时,编译器会执行默认的 ToString() 方法,所以你会得到类似alert(System.Collections.Generic.Dictionary...);
的东西。请注意,这里没有引号,因此它会生成一个 javascript 错误。您可以通过将其括在引号中来“解决”此问题:alert("<%=dict%>");
。
但是,这可能不是您想要做的。您很可能正在尝试将实际字典放入 Javascript 对象中。为此,您可以使用 javascript 的 JSON.parse
和 System.Web.Script.Serialization.JavaScriptSerializer
将数据输出为 JSON 对象。如果您使用 jQuery,那么您可以使用 parseJSON,否则您可以在大多数浏览器上使用 JSON.parse,我认为(我总是使用 jQuery,所以我比浏览器提供的 JSON.parse 更熟悉它)。
下面是一些将对象输出到 JSON 的代码:
public string DictJSON
get
JavaScriptSerializer jSer = new JavaScriptSerializer();
return jSer.Serialize(dict);
您可以使用 jQuery 来使用它:
$.parseJSON('<%=DictJSON %>');
请注意,JavaScriptSerializer 是 System.Web.Extensions.dll 的一部分,因此您需要添加对它的引用。它不能处理所有对象类型,但 Dictionary 应该没问题,List 也应该。此外,由于它以双引号输出 JSON 对象字符串,因此请确保在 parseJSON 中使用单引号。
【讨论】:
【参考方案2】:我真的不知道您的代码生成的错误,但这是我所知道的。应该像这样添加或'绑定'字典:
DataTable dt = new DataTable();
Dictionary<string,string> dict = new Dictionary<string,string>();
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Type", typeof(string)));
foreach (DataDefinitionResponse dr in _dr)
if (dr.Type != "Group" && dr.Type != "File")
DataRow row = dt.NewRow();
row["Name"] = dr["Name"].toString();
row["Type"] = dr["Key"].toString;
dt.Rows.Add(row);
foreach(DataRow dr in dt.Rows)
dict.Add(dr.ItemArray[0].ToString(), dr.ItemArray[1].ToString());
ddlFieldName.DataSource = dict; // the dictionary should be here
ddlFieldName.DataTextField = "Key";
ddlFieldName.DataValueField = "Value";
ddlFieldName.DataBind();
或在第一个 foreach 循环中添加 Dictionary 元素,如下所示:
foreach (DataDefinitionResponse dr in _dr)
if (dr.Type != "Group" && dr.Type != "File")
DataRow row = dt.NewRow();
row["Name"] = dr["Name"].toString();
row["Type"] = dr["Key"].toString();
dt.Rows.Add(row);
dict.Add(dr["Key"].ToString(), dr["Name"].ToString());
ddlFieldName.DataSource = dict; // the dictionary should be here
ddlFieldName.DataTextField = "Key";
ddlFieldName.DataValueField = "Value";
ddlFieldName.DataBind();
更新
您以错误的方式声明或初始化列。你可以试试我的更新。
【讨论】:
以上是关于如何将 Dictionary<string, string> 变量从后面的代码传递到 asp.net?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Dictionary<string, string> 变量从后面的代码传递到 asp.net?
如何将 Dictionary<string,string> 添加到现有 JSON.Net 的 JObject?
如何使用 System.Text.Json 将 json 字符串或流反序列化到 Dictionary<string,string>
如何将 C# 中的 Dictionary <string,List<string>> 转换为带有键作为标题的 csv?
将 Dictionary<string,string> 存储在应用程序设置中
将 [Dictionary<String,Any?>] 转换为 [Dictionary<String,Any!>] ?迅速 3