我从互联网上的某个地方做了一个例子(我不记得它在哪里)并将它放入我的应用程序中。代码可以工作,但不完全符合我的要求,我似乎无法弄清楚如何完成它。
下面的代码采用所有选中的复选框,并在应该的位置更新数据库。大!但是,取消选中复选框后,无法将数据库中的字段从开启更改为关闭。
我怀疑我将不得不做一个完整的代码重写,但这是我目前所拥有的。
查看:
@foreach (var item in Model)
{
<tr>
@Html.HiddenFor(modelItem => item.id)
<td class="selectAll">
<input type="checkbox" name="complete" value="@item.id"/>
</td>
</tr>
}
控制器:
[HttpPost]
public ActionResult Complete(FormCollection c)
{
int i = 0;
if (ModelState.IsValid)
{
var DelIDArray = c.GetValues("item.id");
var DelCompleteArray = c["complete"];
for (i = 0; i < DelIDArray.Count(); i++)
{
string find = DelIDArray[i].ToString();
deliverylist dels = db.deliverylists.Find(Convert.ToInt32(DelIDArray[i]));
dels.is_complete = Convert.ToInt32(DelCompleteArray[i]);
}
db.SaveChanges();
}
return RedirectToAction("Complete");
}
答案 0 :(得分:0)
只有在您提交表单时才会触发控制器代码。
当单击其中一个复选框时,您可以使用异步方法(jquery)来调用更新代码,但是当您只需要更新一个复选框时,它会对所有复选框进行评估。
正如您所料,如果您希望它能够异步工作,还有一些工作要做。以下是关于一起使用mvc4 / webapi / jquery的一些入门知识:
http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC-and-WebAP
答案 1 :(得分:0)
下面的代码让我了解并且我可以继续工作但是我知道这不对,我正在寻找合适的解决方案。
我以2为增量输入n的原因是因为“complete”复选框数组收集了所有的false复选框,并添加了真正的复选框,同时抛出了对齐方式。 (如果这是有道理的)
这是我第一次使用复选框
更新数据库查看:
@foreach (var item in Model)
{
<tr>
@Html.HiddenFor(modelItem => item.id)
<td class="selectAll">
@if (item.is_complete == 1)
{
@Html.CheckBox("complete", true, new { id = item.id, @value = item.id })
}
else
{
@Html.CheckBox("complete", new { id = item.id, @value = item.id })
}
</td>
</tr>
}
控制器:
[HttpPost]
public ActionResult Complete(FormCollection c)
{
int i = 0;
if (ModelState.IsValid)
{
var DelIDArray = c.GetValues("item.id");
var DelCompleteArray = c["complete"];
var n = 0;
for (i = 0; i < DelIDArray.Count(); i++)
{
string find = DelIDArray[i].ToString();
deliverylist dels = db.deliverylists.Find(Convert.ToInt32(DelIDArray[i]));
if (c.GetValues("complete")[n] == "false")
{
dels.is_complete = 0;
n = n + 1;
}
else
{
dels.is_complete = 1;
n = n + 2;
}
db.Entry(dels).State = EntityState.Modified;
}
db.SaveChanges();
}
return RedirectToAction("Complete");
}