Javascript 如何将值为Id的复选框列表保存到数据库?
我在同一视图中显示了不同表中的课程列表,如下所示 我希望用户通过选中复选框来选择他想要注册的课程。 如何获取所选课程的Id,然后传递给控制器以保存到另一个表 我的HTML代码如下所示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
@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);