我希望用户通过选中复选框来选择要注册的课程。 如何获取所选课程的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>
其中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
是
[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
没有使复选框传递给控制器。
我到底在做什么错?
答案 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;
}
}
。使用以下代码获取所有检查的值。并且确保:checked
和input[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。