Как сохранить список флажков со значением в качестве идентификатора в базе данных? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть списки курсов из разных таблиц, отображаемые в том же виде, как показано ниже enter image description here

Я хочу, чтобы пользователь выбрал курсы, которые он хочет зарегистрировать, установив флажки,Как получить идентификаторы выбранных курсов, а затем передать их контроллеру для сохранения в другой таблице.

У меня есть HTML-код, такой как

    @model FlexSchool.Data.Models.ClassModelIndex

                    <tbody>
                                            @foreach (var item in Model.AdmInstAssignCourses.Where(m => m.IsCompulsory == true))
                                            {
                                                <tr>
                                                    <td>
                                                        <input type="checkbox" class="checkBox" name="check" value="@item.AdmInstCourses.CourseId" />
                                                    </td>
                                                    <td>  @Html.DisplayFor(modelItem => item.AdmInstCourses.CourseCode) </td>
                                                    <td> @Html.DisplayFor(modelItem => item.AdmInstCourses.CourseName)</td>
                                                    <td> @Html.DisplayFor(modelItem => item.AdmInstCourses.Units)</td>

                                                </tr>
                                            }
                                        </tbody>

Где ClassModelIndex - этокласс IEnumerable Классы, которые я использовал при отображении различных таблиц в списке.

Моя кнопка работает таким образом <input type="submit" value="Register Courses" id="register" class="btn btn-rose" />

Мой скрипт выглядит так

    <script>
    $(document).ready(function () {

        $("#register").click(function () {
            var selectedIDs = [];
            $('input[type=checkbox]').each(function () {
                selectedIDs.push($(this).val());
            });
            $.ajax({

                url = "/Course/RegisterCourse",
                type = "POST",
                data = JSON.stringify({ courseIDs: selectedIDs }),
                contentType = "application/json; charset=utf-8",
                dataType = "json",
                success = function (data) {
                    alert(data);
                },
                error = function () {
                    alert("Error while registering courses!");
                },
            });
        });



</script>

МойController is

    [HttpPost]
        public async Task<ActionResult> RegisterCourse(List<string> courseIDs)
        {

            var user = HttpContext.Session.GetString(InstName);
            if (user == null)
            {
                return RedirectToAction("Login", "Account");
            }

            foreach (string courseID in courseIDs)
            {
                AdmInstCourses obj = await _context.AdmInstCourses.FindAsync(courseID);
                var mycourses = new CourseRegModel { CourseCode = obj.CourseCode, CourseTitle = obj.CourseName, CourseUnit = obj.Units};
                _context.Add(mycourses);

            }
            await _context.SaveChangesAsync();
            return RedirectToAction("MyCourses", "Course");
        }

Но когда я запускаю код в режиме отладки, я замечаю, что мой courseIDs не получает никакого списка строк в качестве Id. Так что либо script не получает флажки для передачи на контроллер.

Что именно я делаю не так?

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Пожалуйста, попробуйте ниже Ajax-код:

var selectedIDs = [];
$('input[type=checkbox]').each(function () {
    selectedIDs.push($(this).val());
});

$.ajax({
        url : '/Course/RegisterCourse',
        type : "POST",
        data: JSON.stringify(selectedIDs),
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        success : function (data) {
            alert(data);
        },
        error : function () {
            alert("Error while registering courses!");
        }
    });

Непосредственно передать строку JSON (JSON.stringify(selectedIDs)) на стороне сервера, а в методе контроллера, используйте [FromBody], чтобы получить значения:

[HttpPost]
public async Task<ActionResult> RegisterCourse([FromBody]List<string> courseIDs)
{


}
0 голосов
/ 31 октября 2019

Прежде всего, вы не можете поместить идентификаторы в значение флажка, потому что значение флажка может иметь значение true или false.

Попробуйте использовать html.HiddenFieldFor (model => model.YourModel [i])и заменить foreach на for.

0 голосов
/ 23 октября 2019

Проблема связана с кодом JavaScript. Вы пропустили :checked. Используйте следующий код, чтобы получить все проверенные значения. И убедитесь, что между input[type="checkbox"] и :checked.

var selectedIDs = [];
$('input[type="checkbox"]:checked').each(function () {
    // looping through each checkbox and storing values in array for checked ones.
    selectedIDs .push($(this).val());
});
нет пробелов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...