似乎有很多问题涉及类似的问题,但我没有找到一个澄清我所遇到的问题的问题。
我正在尝试创建一个简单的任务列表,看起来像这样(抱歉无法发布图片):
| CheckBox | Title | DeleteLink |
| CheckBox | Title | DeleteLink |
| CheckBox | Title | DeleteLink |
我无法获取更新模型的复选框(我想要一个复选框点击调用相关控制器来设置模型中的更新状态)
我可能有错误的控制器签名/参数或其他东西!
目前,如果我选中一个复选框,然后删除另一个任务,则会呈现旧的复选框状态(模型尚未更新)
这是我的模特
namespace TaskList.Models
{
public class TaskListModel
{
public List<TaskItem> Tasks { get; set; }
}
public class TaskItem
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public DateTime EntryDateTime { get; set; }
public bool IsDone { get; set; }
}
}
这是我的观点
@using (@Html.BeginForm("Edit", "Home"))
{
<table>
@for (int i = 0; i < Model.Tasks.Count; i++)
{
<tr>
<td>
@Html.CheckBoxFor(m => m.Tasks[i].IsDone)
</td>
<td>
@Html.EditorFor(m => m.Tasks[i].Title)
</td>
<td>
@Html.ActionLink("Delete", "Delete", new { id = Model.Tasks[i].Id })
</td>
</tr>
}
</table>
}
我尝试控制器动作(未调用)
// Mark a task as complete
[HttpPost]
public ActionResult Edit(int id = 0, bool isChecked = false)
{
// database logic
TaskItem taskItem = _db.Tasks.Find(id);
taskItem.IsDone = isChecked;
_db.SaveChanges();
return RedirectToAction("Index");
}
按要求删除方法
// Delete a task
public ActionResult Delete(int id = 0)
{
if (id > 0)
{
// database logic
TaskItem taskItem = _db.Tasks.Find(id);
_db.Tasks.Remove(taskItem);
_db.SaveChanges();
}
return RedirectToAction("Index");
}
我已尝试将此javascript添加到视图
$(function () {
$(':checkbox').change(function () {
$.ajax({
url: '@Url.Action("Edit", "Home")',
type: 'POST',
data: { id: $(this).id, isChecked: $(this).is(':checked') },
success: function (result) {
}
});
});
});
不确定是否正在调用
仍然没有喜欢
答案 0 :(得分:0)
您只需在选中复选框时提交表单。
答案 1 :(得分:0)
感谢Joan指点我的建设性方向。我意识到我需要一些jQuery / Ajax来解决这个问题并进行更多搜索以获得解决方案。
在js文件中使用以下脚本
$(function () {
$("input[type=checkbox]").click(function () {
var data_id = $(this).data("id");
$.ajax({
url: 'Home/Edit',
type: 'POST',
data: { id: data_id, isChecked: $(this).is(':checked') },
success: function (result) {
}
});
});
});
将视图中的代码更改为:
@using (@Html.BeginForm())
{
<table>
@for (int i = 0; i < Model.Tasks.Count; i++)
{
<tr>
<td>
@Html.CheckBoxFor(m => m.Tasks[i].IsDone, new { data_id=Model.Tasks[i].Id })
</td>
<td>
@Html.EditorFor(m => m.Tasks[i].Title)
</td>
<td>
@Html.ActionLink("Delete", "Delete", new { id = Model.Tasks[i].Id })
</td>
</tr>
}
</table>
}