如何将具有值为ID的复选框列表保存到数据库?

时间:2019-10-23 11:35:21

标签: javascript c# asp.net-core

我有来自不同表的课程列表显示在同一视图上,如下所示enter image description here

我希望用户通过选中复选框来选择要注册的课程。 如何获取所选课程的ID,然后传递到控制器以保存到另一个表。

我有这样的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>

其中ClassModelIndexIEnumerable的一类,我用于显示要列出的不同表。

我的按钮因此<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

    [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 :(得分:0)

问题出在JavaScript代码上。您错过了function limit_words_on_posts($content) { // Get the post content $post_type = get_post_type(); if ($post_type == 'post'){ $post = get_post(); $url = 'https://www.vierenzestig.nl/'; $postslug = $post->post_name; // Limit the post content $text = $content; $words = 300; $link = $url . $postslug; $more = '...<br/><br/><strong>Wilt u dit artikel verder lezen? <a style="color: red; text- decoration: underline;" href="'.$link.'">Ga dan naar VierenZestig.NL!</a></strong>'; $excerpt = wp_trim_words( $text, $words, $more ); return $excerpt; } else { return $content; } } 。使用以下代码获取所有检查的值。并且确保:checkedinput[type="checkbox"]之间没有空格。

:checked

答案 1 :(得分:0)

请尝试以下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)
{


}

答案 2 :(得分:0)

首先,您不能将id放在复选框的值中,因为复选框的值可以为true或false。

尝试使用html.HiddenFieldFor(model => model.YourModel [i])并将foreach替换为for。