我正在尝试仅提交已检查的这些行。我正在使用this jquery plungin ,我的表与链接
中的相同@model IEnumerable<BillBox.ACD_UNI_STUDENTS>
<table class="table tblSelect">
<tr>
<th>
<input type="checkbox" id="checkall" title="Select all" />
</th>
<th>
@Html.DisplayNameFor(model => model.FIRST_NAME)
</th>
<th>
@Html.DisplayNameFor(model => model.LAST_NAME)
</th>
<th>
@Html.DisplayNameFor(model => model.PERSONAL_NUMBER)
</th>
<th>
@Html.DisplayNameFor(model => model.ACD_UNI_DEGREES.DEGREE)
</th>
<th>
@Html.DisplayNameFor(model => model.ACD_UNI_FACULTIES.FACULTY)
</th>
<th>
@Html.DisplayNameFor(model => model.ACD_UNI_SEMESTERS.SEMESTER)
</th>
<th>
@Html.DisplayNameFor(model => model.ACD_UNI_SPECIALIZATIONS.SPECIALIZATION)
</th>
<th>
@Html.DisplayNameFor(model => model.COR_PAYER_STATUS.NAME)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
<input type="checkbox"/>
</td>
<td>
@Html.DisplayFor(modelItem => item.FIRST_NAME)
</td>
<td>
@Html.DisplayFor(modelItem => item.LAST_NAME)
</td>
<td>
@Html.DisplayFor(modelItem => item.PERSONAL_NUMBER)
</td>
<td>
@Html.DisplayFor(modelItem => item.ACD_UNI_FACULTIES.FACULTY)
</td>
<td>
@Html.DisplayFor(modelItem => item.ACD_UNI_SEMESTERS.SEMESTER)
</td>
<td>
@Html.DisplayFor(modelItem => item.ACD_UNI_SEMESTERS.SEMESTER)
</td>
<td>
@Html.DisplayFor(modelItem => item.ACD_UNI_SPECIALIZATIONS.SPECIALIZATION)
</td>
<td>
@Html.DisplayFor(modelItem => item.COR_PAYER_STATUS.NAME)
</td>
</tr>
}
</table>
现在我有一个问题。如何检索 仅这些行 选中哪个复选框?
那是我的控制器
public PartialViewResult AllStudent()
{
var students = (from q in db.ACD_UNI_STUDENTS
select q).ToList();
return PartialView(students);
}
有很多行(来自db)所以我不能用formcollection来做。我找不到他们的名字
答案 0 :(得分:1)
您可以将选定的ID提交为IEnumerable,然后在控制器中过滤它们!这是一个例子
<form action="url" method="post">
...
@foreach (var item in Model)
{
<tr>
<td>
<input type="checkbox" name="Objs[]" id="Objs[]" value="@item.UNIQUE_ID"/>
</td>
<td>
@Html.DisplayFor(modelItem => item.FIRST_NAME)
</td>
</tr>
}...
</form>
和您的控制器
[HttpPost]
public PartialViewResult AllStudent(IEnumerable<long> Objs)
{
var students = (from q in db.ACD_UNI_STUDENTS
where Objs.Contains(q.UNIQUE_ID)
select q).ToList();
return PartialView(students);
}
...
答案 1 :(得分:1)
我建议不要直接使用View的数据库模型。您应该有一个模型绑定到行,可能看起来像:
public class StudentRowViewModel
{
public bool IsChecked { get; set; }
public int StudentId { get; set; }
// ... More columns, whatever you want to display
public string Name { get; set; }
}
填充视图时,您可以选择StudentRowViewModels
,如下所示:
db.ACD_UNI_STUDENTS.Select(x => new StudentRowViewModel { StudentId = x.UNIQUE_ID, Name = ... });
或者适用于您的数据库模型的任何内容。
在您的视图中,您的复选框也将绑定到模型:
@Html.CheckboxFor(x => x.IsChecked)
最后,提交表单时,您只能选择已选中的项目:
public ActionResult AllStudents(IEnumerable<StudentRowViewModel> model)
{
var checked = model.Where(x => x.IsChecked).Select(x => x.StudentId).ToList();
var items = db.ACD_UNI_STUDENTS.Where(x => checked.Contains(x.UNIQUE_ID));
}
你明白了吗?
答案 2 :(得分:0)
首先在您的复选框中添加一个class和value属性:
<input type="checkbox" class="myCheckBox" value="@item.PERSONAL_NUMBER" />
然后我建议您使用JQuery脚本来检测选中的复选框:
我想你有一个按钮可以做另一个动作:
$(document).ready(function () {
$('#myButton').click(function() {
var id = '';
$('.myCheckBox:checked').each(function (e) {
id += $(this).val() + ';'
}
var url = '/ControllerName/ActionResultName';
$.ajax({
url:url,
cache: false,
type: 'POST',
data: {
Id: id
},
succes: function(data){
$('.myCheckBox').attr('checked',false);
location.reload();
}
})
}
});
之后,您可以在控制器中获取控制器中的所有个人号码:
将一个字符串参数'id'放入你的actionresult。
id.TrimEnd(';')