Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net数组失去了Javascript函数的结构_Javascript_C#_Arrays_Asp.net Mvc - Fatal编程技术网

ASP.Net数组失去了Javascript函数的结构

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; }

我目前正在开发一个ASP.NETMVC Razor应用程序。 在我的控制器中,我加载了两个包含数据的字典,并将它们放置在ViewModel中,如下所示:

    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)如果您需要其他帮助,请随意编辑顶部的问题。