передать массив из JavaScript в viewbag и использовать его в контроллере - PullRequest
0 голосов
/ 19 апреля 2019

Мой школьный проект о создании приложения для сотрудников авиастроительной компании.мы решили объединить данные для входа в систему и наши таблицы с данными, необходимыми для проекта.мы изменили регистрационную форму, чтобы использовать электронную почту и пароль от личности, а также дополнительные данные из таблицы наших сотрудников.это работает и обновляет обе таблицы одновременно.Затем мы добавили роли (пилот, механик, стюардесса) и, выбрав роль, javascript загружает дополнительные опции для этих ролей (для сопровождающего вы можете выбрать язык, на котором он говорит, и для механика, какие самолеты им разрешено ремонтировать. для пилотов мыпросто введите дату последнего медицинского осмотра).Пилоты работают нормально, но поскольку обслуживающий персонал может говорить на большем количестве языков, а механики могут лицензироваться для более чем одного типа самолета, мы написали js, чтобы умножить эти конкретные поля выбора, нажав на значок +.тогда мы не знали, как вернуть эти несколько частей данных обратно в контроллер, чтобы он мог обновить базу данных.Учитель сказал нам собрать все значения, выбранные внутри массива javascript (готово), и передать его в пакет просмотра.мы никогда не делали такого примера в классе, и поиск в Google приводит к множеству способов передать viewbag в javascript, но не наоборот.Учитель сказал нам просто объявить viewbag в верхней части контроллера как нулевой, затем заполнить его при просмотре и использовать его в контроллере там, где это необходимо, для зацикливания и ввода данных в базу данных.Мне просто нужно знать, как передать массив 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 в viewbag, или есть другой способ собрать несколько значений из повторяющихся блоков выбора и выполнить цикл через них на стороне контроллера?

1 Ответ

2 голосов
/ 19 апреля 2019

Я бы предпочел, чтобы вы передавали данные на контроллер через вызовы AJAX в случае, если вы хотите. Вот пример Использование ViewBag для этого кажется мне бесполезным делом.

...