我的学校项目是为飞机公司的员工构建一个应用程序。我们决定将登录身份以及我们的表与项目所需的数据结合起来。我们修改了注册表格,以使用来自身份的电子邮件和密码,以及来自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数组放入视图包中,或者还有另一种方法可以从重复的选择框中收集多个值,并在控制器端循环通过它们?任何帮助表示赞赏