如何传递Dictionary<字符串,字符串>从代码隐藏到asp.net的变量
How to pass Dictionary<string, string> variable from code behind to asp.net?
我正试图将公共字典从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();
}
ASP:
<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>
有什么想法吗?
当您使用<%=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.parce更熟悉它)
以下是一些将对象输出到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中使用单引号。
我真的不知道你的代码产生的错误,但我知道的是。字典应该添加或"隐藏",如下所示:
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();
更新
您以错误的方式声明或初始化列。你可以试试我的更新。
- 将查询字符串值从页面传递 asp.net 到 iframe
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- 从服务器端经典 asp 和客户端 javascript 传递字符串
- 将列表<字符串>转换为客户端 ASP.NET MVC 上的 Json 数组
- 在 JavaScript 中将查询字符串传递给 Web 服务 (ASP.NET)
- 使用 MVC 删除 JavaScript 中硬编码字符串 Asp.Net 最佳方法
- Asp.net WebMethod-返回字符串[]并使用JavaScript进行解析
- 无法将字符串数组分配给asp:HiddenField
- 使用ShowModalDialog传递值,使用asp.net代码隐藏中的查询字符串
- 如何将字符串数组从javascript传递到asp.net Web服务
- 将URL查询字符串值从JavaScript编码为ASP.NET MVC
- 在 ASP.NET 中,您可以字符串.清空焦点中的文本框
- 如何使用一些变量参数从javascript函数调用 asp.net C#函数并从C#函数获取字符串返回
- 如何将一些参数从javascript接收响应字符串 asp.net 页面并更新html文档
- ASP.NET MVC - 在客户端 JS 中访问 C# 字符串
- 调用 JQuery 函数时 asp.net 字符串错误
- 如何在 javascript src 字符串中插入 ASP.NET 数据绑定器
- 在ASP中使用ajax向控制器发送xml字符串.asp.net MVC 3
- 显示查询字符串 asp.net
- 如何使用查询字符串 ASP 获取 #