我正在从Razor页面上的数据库中提取数据并将其放在列表中。目的是让用户键入一年,然后弹出汽车品牌。
C#
List<string[]> ListOfAutoMakes = new List<string[]>();
foreach (var item in SQDB.Query("SELECT year, make FROM cars"))
{
string[] AutoMakes = new string[2];
AutoMakes [0] = item.id.Trim();
AutoMakes [1] = item.make.Trim();
ListOfAutoMakes.Add(AutoMakes);
}
cshtml文件中的Javascript:
var AutoMakeList = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ListOfAutoMakes.ToArray()))';
alert(AutoMakeList.1983 + ' ' + AutoMakeList['1991'])
渲染的Javascript显示我的数据如下:
var AutoMakeList = '[["1983","VOLVO"],["1991","FIAT"],["1982","VOLVO"]]'
输出为Undefined
或空字符串。
很显然,我没有键/值对。我确定问题在于如何构建C#列表,但是我不确定应该如何创建它。我是C#的新手,但是我相信当我真的需要构建字典时,我正在构建一个数组数组。我花了一整天的时间创建一个C#字典,将其序列化为JSON,然后通过Key访问生成的JSON。我找到的所有示例都是针对较旧/其他版本的C#,或者不够完整,无法连接所有点。
答案 0 :(得分:0)
您当前的JSON数据是一个数组而不是对象,所以我认为您不能使用键/值来做到这一点。
如果要在Javascript中使用JSON键/值。
您可以尝试创建AutoMakes
类而不是string[2]
来承载数据。
public class AutoMakes
{
public string id { get; set; }
public string make { get; set; }
}
然后您可以像在控制器中的SerializeObject
那样使用带字符串的JSON。
List<AutoMakes> ListOfAutoMakes = new List<AutoMakes>();
foreach (var item in SQDB.Query("SELECT year, make FROM cars"))
{
ListOfAutoMakes.Add(new AutoMakes()
{
id = item.id.Trim(),
make = item.make.Trim()
});
}
ViewBag.ListOfAutoMakes = Newtonsoft.Json.JsonConvert.SerializeObject(ListOfAutoMakes);
然后您可以显示数组第一个对象键= {id
的值。
var AutoMakeList = @Html.Raw(ViewBag.ListOfAutoMakes);
alert(AutoMakeList[0].id);
注意
我会使用ajax而不是razor来调用JSON数据,因为这样会更灵活。