我使用从Controller传入的模型填充了我的View。每个循环还将生成一个超链接按钮,应在guid中传递。但是,当我单击按钮并启动 POST 请求时,guid属于上一个索引的按钮。
然而,在使用Chrome的检查工具检查元素后,按钮上附有正确的guid。只需在单击按钮(POSTing)时,作为参数传递的guid属于上一个索引。
例如:
按钮A(GUID 1000)
按钮B(GUID 2000)
按钮C(GUID 3000)
当我点击按钮B时,为POSTing传递的guid为1000,属于Button A.
Index.cshtml
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.PatientName)
</td>
<td>
@Html.DisplayFor(modelItem => item.NRIC)
</td>
<td>
@using (Html.BeginForm("Patient", "MainController", new { guid = item.PatientId }, FormMethod.Post, new { id = "submitRequest" })) {
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('submitRequest').submit()" onclick="return confirm('A pop up message.');" class="btn btn-success glyphicon glyphicon-plus" title="Request"></a>
}
</td>
</tr>
}
MainController.cs
// POST: Doctor/Patient
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Patient(string guid) {
try {
if (ModelState.IsValid) {
var currentTime = DateTime.Now;
db.Appeal.Add(new Appeal {
DoctorId = User.Identity.GetUserId(),
PatientId = guid, // issue is here.
Time = currentTime,
IsApprove = false
});
TempData["Message"] = "Appeal is being processed. Check the Request page for outcome.";
db.SaveChanges();
return RedirectToAction("Patient");
}
} catch (DataException dex) {
}
return RedirectToAction("Patient");
}
我可以知道哪里出错了吗?一直试图修复这个过去1个小时,似乎无法弄清楚是什么导致它。
答案 0 :(得分:1)
这一行
@using (Html.BeginForm("Patient", "Doctor", new { guid = item.PatientId }, FormMethod.Post, new { id = "submitRequest" }))
id
对于所有表单元素都相同,并且您使用相同的id
元素通过javascript提交这些表单。所以当你打电话时
document.getElementById('submitRequest`)
它将始终返回具有给定id
的第一个表单元素。您需要为每个表单元素附加不同的id
属性。
答案 1 :(得分:0)
<强>解决方案强>
更新 Index.cshtml ,如下所示。
@using (Html.BeginForm("Patient", "Doctor", new { guid = item.PatientId }, FormMethod.Post)) {
@Html.AntiForgeryToken()
<button class="btn btn-success glyphicon glyphicon-plus" type="submit" onclick="return confirm('Are you sure?')"></button>
}