仅提交选中的项目

时间:2015-04-20 08:30:01

标签: c# jquery asp.net-mvc asp.net-mvc-4

我正在尝试仅提交已检查的这些行。我正在使用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来做。我找不到他们的名字

3 个答案:

答案 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(';')