我用所显示的措辞提出问题,以便表明我真正想做的事情。虽然我可以提出这样的问题:“如何使用jQuery读取表格的内容并转换为IEnumerable<ModelName>
类型?”我会隐藏重要的背景,这可能暗示一种更好的方法来实现这一结果,这正是我真正希望的。
当从模型中自动搭建控制器和视图(使用实体框架)时,生成的视图允许通过单击行,编辑记录和返回索引一次编辑一条记录。对于许多情况而言,这是所需的功能。
但是当人们想要在表格中大量更新价值时,就好像有人在电子表格上工作一样。例如,切换一些复选框并单击“更新”,就像在这种情况下一样。
我的一个工作思路是使用jQuery:
IEnumerable<SampleModel>
类型的变量。我真的被#1困住了,因为我需要能够将IEnumerable<SampleModel>
类型的对象传递给控制器的方法,而且我不知道该怎么做。
控制器:
public void UpdateTable(IEnumerable<SampleModel> query)
{
// I'm verifying existence before writing code here.
// This is where I'll be updating the database.
Debug.WriteLine("Test for query existence " + query.Count());
}
查看:
@model SampleSystem.Areas.FakeName
<button id="UpdateTableTop">Update</button>
<table class="table">
<tr>
<th></th>
<th>
@Html.DisplayNameFor(model => model.Reconciled)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentID)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.HiddenFor(modelItem=>item.ID)
</td>
<td>
@Html.CheckBoxFor(modelItem => item.Reconciled)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentID)
</td>
</tr>
}
</table>
@section scripts {
<script>
$(function () {
$("UpdateTableTop").click(function (e) {
$.ajax({
url: '@Url.Action("UpdateTable")',
data:
/* ... Need to convert table
* to IEnumerable<SampleModel> ...
*/,
success: function (){
console.log("Success!");
}
});
});
});
</script>
}
答案 0 :(得分:1)
这不是一个完整的答案,但应引导您朝着正确的方向前进。
SampleModel
在服务器端,模型绑定将根据发布的值创建{1}
。
答案 1 :(得分:1)
除了之前的答案之外,还有一种可能的方法。 将数据属性添加到复选框
@Html.CheckBoxFor(modelItem => item.Reconciled, new { data_myid = item.ID }) /* the _ gets converted to - */
稍后,使用jQuery检索所有选中的复选框。
var selectedIds = new Array();
$( "input:checked" ).each(function(eachCheckbox){
selectedIds.push($(eachCheckbox).data('myid'));// could serialize to JSON but if the update action is the same for all id's then there is no need for additional data transfer
});
然后在ajax调用中将selectedIds作为数据传递,并在成功时通知。
在服务器端:
public void UpdateTable(IEnumerable<int> query) /* change type to int */
{
Debug.WriteLine("Test for query existence " + query.Count());
}