Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将值为Id的复选框列表保存到数据库?_Javascript_C#_Asp.net Core - Fatal编程技术网

Javascript 如何将值为Id的复选框列表保存到数据库?

Javascript 如何将值为Id的复选框列表保存到数据库?,javascript,c#,asp.net-core,Javascript,C#,Asp.net Core,我在同一视图中显示了不同表中的课程列表,如下所示 我希望用户通过选中复选框来选择他想要注册的课程。 如何获取所选课程的Id,然后传递给控制器以保存到另一个表 我的HTML代码如下所示 @model FlexSchool.Data.Models.ClassModelIndex @foreach(Model.administrassigncourses.Where(m=>m.IsCompulsory==true)中的var项) { @DisplayFor(modelItem=>item.AdmIns

我在同一视图中显示了不同表中的课程列表,如下所示

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

我的HTML代码如下所示

@model FlexSchool.Data.Models.ClassModelIndex
@foreach(Model.administrassigncourses.Where(m=>m.IsCompulsory==true)中的var项)
{
@DisplayFor(modelItem=>item.AdmInstCourses.CourseCode)
@DisplayFor(modelItem=>item.AdmInstCourses.CourseName)
@DisplayFor(modelItem=>item.AdminsCourses.Units)
}
其中,
classmodelnex
是一类
IEnumerable
类,我用它来显示要列出的不同表

我的按钮就这样按下了

我的脚本是这样的


$(文档).ready(函数(){
$(“#注册”)。单击(函数(){
var selectedds=[];
$('input[type=checkbox]')。每个(函数(){
选择edids.push($(this.val());
});
$.ajax({
url=“/Course/RegisterCourse”,
type=“POST”,
data=JSON.stringify({courseIDs:selectedds}),
contentType=“application/json;charset=utf-8”,
dataType=“json”,
成功=功能(数据){
警报(数据);
},
错误=函数(){
警报(“注册课程时出错!”);
},
});
});
我的
控制器是

    [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");
        }
[HttpPost]
公共异步任务注册表课程(列出课程ID)
{
var user=HttpContext.Session.GetString(InstName);
if(user==null)
{
返回重定向操作(“登录”、“帐户”);
}
foreach(courseIDs中的字符串courseID)
{
AdmInstCourses obj=await_context.AdmInstCourses.FindAsync(courseID);
var mycourses=newcourseregmodel{CourseCode=obj.CourseCode,CourseTitle=obj.CourseName,CourseUnit=obj.Units};
_添加(mycourses);
}
wait_context.SaveChangesAsync();
返回重定向到操作(“MyCourses”、“Course”);
}
但是当我在调试模式下运行代码时,我注意到我的
courseIDs
没有获取任何字符串列表作为Id。因此可能是
脚本
没有获取要传递给控制器的复选框


我到底做错了什么?

问题在于JavaScript代码。您错过了:checked。请使用以下代码获取所有选中值。并确保输入[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());
});

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


}
[HttpPost]
公共异步任务注册表课程([FromBody]列表课程ID)
{
}

首先,您不能将ID放入复选框的值中,因为复选框的值可以是true或false


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

@Brainiac005是否至少得到一个值?(第一行的值)不,我没有得到任何值。javascript不会通过其中指定的Url重定向到操作。单击按钮时,我使用
方法重定向到控制器中的我的操作。似乎Ajax调用有问题。请尝试此
$.Ajax({Url:'@Url.action(“RegisterCourse”,“Course”),键入:“POST”,data=JSON.stringify({'courseIDs':selectedds}),contentType:“application/JSON;charset=utf-8”,dataType=“JSON”,成功:函数(数据){alert(数据);},错误:函数(){alert(“注册课程时出错!”;},});
谢谢,但是我已经能够通过使用这个
var options={};options.url=“@url.Action(“RegisterCourse”,“Course”);“options.type=“POST”;options.data=JSON.stringify({'courseIDs':SelectedDS})使我的ajax调用正常工作了;options.contentType=“application/json;charset=utf-8;”options.dataType=“json”,options.success=function(){alert(“注册课程时出错”);};options.error=function(){alert(“注册课程时出错”);};$.ajax(选项);
我现在面临的唯一挑战是在控制器中执行操作,以获取来自json post的字符串数组。是否将值添加到服务器端的数组中。是否尝试在调用Ajax之前填充数组之后添加
警报(selectedIDs)
var-selectedIDs=[];$('input[type=“checkbox”]:checked')).each(函数(){//循环遍历每个复选框并在数组中存储选中复选框的值。selectedds.push($(this).val();});alert(selectedds);