将数组从javacript传递到viewbag并在控制器中使用它

时间:2019-04-19 10:46:15

标签: javascript c# asp.net entity-framework asp.net-identity

我的学校项目是为飞机公司的员工构建一个应用程序。我们决定将登录身份以及我们的表与项目所需的数据结合起来。我们修改了注册表格,以使用来自身份的电子邮件和密码,以及来自employees表的其他数据。这样可以同时更新两个表。然后,我们添加了角色(飞行员,机修工,空姐),并在选择了角色后,javascript为这些角色加载了其他选项(对于机务员,您可以选择他们说的语言,对于机修工,他们可以维修哪些飞机。)只需输入上次体检的日期)。飞行员可以正常工作,但是由于服务员可以说多种语言,并且机械师可以使用一种以上的飞机,因此我们编写了js,通过单击+图标将这些特定的选择字段相乘。那时我们不知道如何将这多个数据返回到控制器中,以便它可以更新数据库。老师告诉我们收集在javascript数组中选择的所有值(完成),然后将其传递给视图中的viewbag。我们从来没有在课堂上做过这样的例子,而谷歌搜索有很多方法可以将viewbag传递到javascript中,而没有其他方法。老师告诉我们,只是将控制器顶部的viewbag声明为null,然后将其填充到视图中,并在控制器需要的地方使用它来循环并将数据输入到数据库中。我只需要知道如何在视图中将js数组传递到viewbag中,并且我假设我在控制器内部编写的代码就可以完成其余工作

单击注册按钮时会调用我的js代码(它将正确的int数组返回到控制台)

function Langs() {
    var trig= document.querySelector(".trig")
    let langs= [];
    trig.onclick = () => {
        let languages= document.querySelectorAll(".languages"); 

        for (let language of languages) {
            langs.push(Number(language.value)); 
        }
        langs= [...new Set(langs)]; 
        console.log(langs);
        return langs;
    }
}

在控制器内部,我有这样的循环:

foreach (var item in ViewBag.JeziciZaUnos)
   {
        Attendant att= new Attendant(){
            att.attId= model.Employee.empId,
            att.langId = Convert.ToInt32(item)
        }
        db.Attendant.Add(att);
        await db.SaveChangesAsync();
}

每次直接从控制器或在视图内将JS数组传递到此viewbag的尝试均失败,并且C#仅看到诸如“ Langs();”之类的字符串。而不是js函数。

如何将这个JS数组放入视图包中,或者还有另一种方法可以从重复的选择框中收集多个值,并在控制器端循环通过它们?任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

我宁愿建议您根据需要通过AJAX调用将数据传递给控制器​​。 Here is the example 对我来说,使用ViewBag似乎是徒劳的。