我一直在尝试更新数据库中的标志(Active)。要做到这一点,我有一个看起来如下的观点。 在视图中,我在数据库中有记录,我在视图中的表中的每一行传递BillPayID。我想要的是当用户按下START或STOP按钮时,活动标志设置为0或1。
问题是,我的观点总是发送第一个BillPayID,即使点击了不同行上的按钮。
有人可以帮忙吗?
@if (Model !=null)
{
using (Html.BeginForm("StopScheduled", "Admin", FormMethod.Post, new { }))
{
<table>
<tr>
<th>
Account Number
</th>
<th>
Payee ID
</th>
<th>
Amount
</th>
<th>
Scheduled Date
</th>
<th>
Period
</th>
<th>
Active
</th>
<th>
Stop/Start Payment
</th>
</tr>
@foreach(var item in Model)
{
@Html.HiddenFor(model => item.BillPayID)
<tr>
<td>
@Html.DisplayFor(model => item.AccountNumber)
@Html.HiddenFor(model => item.AccountNumber)
</td>
<td>
@Html.DisplayFor(model => item.PayeeID)
@Html.HiddenFor(model => item.PayeeID)
</td>
<td>
$ @Html.DisplayFor(model => item.Amount)
@Html.HiddenFor(model => item.Amount)
</td>
<td>
@Html.DisplayFor(model => item.ScheduleDate)
@Html.HiddenFor(model => item.ScheduleDate)
</td>
<td>
@Html.DisplayFor(model => item.Period)
@Html.HiddenFor(model => item.Period)
</td>
<td>
@Html.DisplayFor(model => item.Active)
@Html.HiddenFor(model => item.Active)
</td>
<td>
@if (item.Active == 0)
{
<input type="submit" style="width:100%" value="START" />
}
else
{
<input type="submit" style="width:100%" value="STOP" />
}
</td>
</tr>
}
</table>
}
}
这是控制器
[HttpPost]
public ActionResult StopScheduled([Bind(Prefix = "item")] BillPayModel model)
{
int NewActive = 1;
if (model.Active == 1)
{
NewActive = 0;
}
try
{
if (ModelState.IsValid)
{
BillPay EditBillPay = db.BillPays.Find(model.BillPayID);
EditBillPay.Active = NewActive;
EditBillPay.ModifyDate = DateTime.Now;
db.Entry(EditBillPay).State = EntityState.Modified;
db.SaveChanges();
return View(model);
}
else
{
ModelState.AddModelError("", "Could not Stop Scheduled Payment");
}
}
catch (FormatException)
{
ModelState.AddModelError("", "Could not Stop Scheduled Payment");
}
return View(model);
}
答案 0 :(得分:0)
隐藏字段在html中仍然有一个名称和ID,因此在您的情况下,您为BillPayID设置的x个隐藏字段将全部命名为item.BillPayID。
将foreach循环更改为for循环,如下所示:
@for (int i =0; i < Model.Count(); i++)
{
@Html.HiddenFor(model => Model[i].BillPayID)
.... rest of your code
}
您的视图代码会将整个模型(IEnumerable)发送到您的控制器,这将确定选择哪一行是一种痛苦,因为它不会显示您在模型中设置跟踪所选项目的任何值。
我建议你将开始/停止过程移动到另一个视图。如果单击表格中的某个项目,则会转到第二页,要求您启动或停止。您还可以使用javascript函数将所选值发送到控制器。