繁体   English   中英

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

[英]pass array from JavaScript to viewbag and use it in controller

我的学校项目是为飞机公司的员工构建一个应用程序。 我们决定将登录身份以及我们的表与项目所需的数据结合起来。 我们修改了注册表格,以使用来自身份的电子邮件和密码,以及来自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数组传递到此视图包的每次尝试均失败,并且C#仅看到诸如“ Langs();”之类的字符串。 而不是js函数。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM