ASP.Net数组失去了Javascript函数的结构
我目前正在开发一个ASP.NETMVC Razor应用程序。 在我的控制器中,我加载了两个包含数据的字典,并将它们放置在ViewModel中,如下所示:ASP.Net数组失去了Javascript函数的结构,javascript,c#,arrays,asp.net-mvc,Javascript,C#,Arrays,Asp.net Mvc,我目前正在开发一个ASP.NETMVC Razor应用程序。 在我的控制器中,我加载了两个包含数据的字典,并将它们放置在ViewModel中,如下所示: public Dictionary<String, List<String>> EngineerSchedule { get; set; } public Dictionary<String, List<String>> WeeklySchedule { get; set; }
public Dictionary<String, List<String>> EngineerSchedule { get; set; }
public Dictionary<String, List<String>> WeeklySchedule { get; set; }
公共字典工程计划{get;set;}
公共词典WeeklySchedule{get;set;}
在视图中,我遍历字典以检索每个键上的列表对象,然后将这个字符串列表更改为一个数组,并将它们发送给JavaScript函数
在我的Js函数中,我想将上面的数组分配给Js变量,这样做时,Js变量变成一个数组,其中索引保存函数调用中的整个数组。
而且,参数变成了一个字符数组
任何关于为什么会发生这种情况的建议都将不胜感激
视图中的代码:
@foreach(var week in Model.WeeklySchedule)
{
var key = week.Key;
var values = week.Value.ToArray();
string[] eng = { };
foreach (var item in Model.EngineerSchedule)
{
if (item.Key == key)
{
eng = item.Value.ToArray();
}
}
@: gatherTimes('@Html.Raw(Json.Encode(key))', '@Html.Raw(Json.Encode(values))', '@Html.Raw(Json.Encode(eng))');
//In here, both values and engs are Array of the correct type and length
}
function gatherTimes(weekKey, values, engs)
{
var week =[];
var eng = [];
week[week.length] = values;
eng[eng.length] = engs;
for(var i = 0; i < engs.length; i++)
{
alert(engs[i]); //Outputs single chars, rather then the string values
alert(eng[i]); //Outputs an array with the length of all the chars from engs, but this array only has one value, which is the entire array from Engs
}
}
@foreach(模型中的变量周。周计划)
{
var key=week.key;
var values=week.Value.ToArray();
字符串[]eng={};
foreach(Model.EngineerSchedule中的var项)
{
如果(item.Key==Key)
{
eng=item.Value.ToArray();
}
}
@:gatherTimes(“@Html.Raw(Json.Encode(key))”、“@Html.Raw(Json.Encode(values))”、“@Html.Raw(Json.Encode(eng))”);
//在这里,值和ENG都是正确类型和长度的数组
}
函数时间(周末、值、英语)
{
风险值周=[];
var eng=[];
周[周长]=值;
英语[英语长度]=英语;
对于(变量i=0;i
将服务器端信息注入应用程序JavaScript部分的一种方法是对.Net对象进行“字符串化”,并在客户端调用JSON.Parse
如果您有来自Newtonsoft的Json.NET nuget包,则可以使用静态方法JsonConvert.SerializeObject()
将几乎所有C#数据结构转换为JSON字符串
使用Razor视图引擎的模板功能将JSON字符串放入视图后,可以将其存储到如下变量中:
var engineerString = @JsonConvert.SerializeObject(Model.EngineerSchedule);
var dictionary = JSON.parse(engineerString);
据我所知,您实际上将javascript函数字符串作为参数,因为它们用引号括起来。也许是混淆的地方?mhm好吧,这似乎是一个可行的解决方案,我会研究lib并尝试一下。说实话,C#object和JavaScript object不能很好地配合使用。我的建议是向服务器发出AJAX请求,并以这种方式检索词典。一般来说,Razor视图引擎非常适合模板化HTML,但当需要模板化JavaScript代码中使用的数据时,它就显得力不从心了。我非常同意你的说法,因为我现在亲身体验到了这一点。我还将考虑提出AJAX请求。我想,我应该在控制器中准备数组,并使用AJAX请求检索所述数组?是的,因此我有一个控制器方法,让我们调用它
public ActionResult GetEngineerSchedule()
这将在最后返回Json(blah)代码>如果您需要其他帮助,请随意编辑顶部的问题。