【发布时间】:2014-05-08 12:31:04
【问题描述】:
我已经使用e.preventDefault(); 函数来限制 HttpPost 操作命中两次。使用提交按钮,系统调用e.preventDefault(); 函数。之后,View 将空对象返回给控制器。我已按照以下链接纠正 HttpPost 问题。
HttpPost action of a controller gets hit twice.
我该如何解决这个问题?
查看代码
@model EmployeeManagement.Model.EmployeeModel
@{
ViewBag.Title = "EditEmployee";
}
<h2>Edit Employee</h2>
<div>
@using (@Html.BeginForm("EditEmployee", "Employee", FormMethod.Post, new { id = "EditEmployeeMsg" }))
{
@Html.HiddenFor(a => a.employeeId)
<div id="butonRight">
<input type="submit" value="Save" />
<input type="button" id="saveCancel" value="Cancel" />
</div>
<table>
<tbody>
<tr>
<td>Title</td>
<td>@Html.DropDownListFor(a => a.titleId, (IEnumerable<SelectListItem>)ViewBag.TitleEdit)</td>
</tr>
<tr>
<td>First Name</td>
<td>@Html.TextBoxFor(a => a.firstName)</td>
</tr>
<tr>
<td>Last Name</td>
<td>@Html.TextBoxFor(a => a.lastName)</td>
</tr>
<tr>
<td>Email</td>
<td>@Html.TextBoxFor(a => a.email)</td>
</tr>
<tr>
<td>Date of Birth</td>
<td>@Html.TextBoxFor(a => a.dateOfBirth, new { @class = "date_view", @Value = Model.dateOfBirth.ToString("dd/MM/yyyy") })</td>
</tr>
<tr>
<td>Date of Join</td>
<td>@Html.TextBoxFor(a => a.dateOfJoin, new { @class = "date_view", @Value = Model.dateOfJoin.ToString("dd/MM/yyyy") })</td>
</tr>
<tr>
<td>Position</td>
<td>@Html.DropDownListFor(a => a.positionId, (IEnumerable<SelectListItem>)ViewBag.PositionEdit)</td>
</tr>
<tr>
<td>Division</td>
<td>@Html.DropDownListFor(a => a.divisionId, (IEnumerable<SelectListItem>)ViewBag.DivisionEdit)</td>
</tr>
<tr>
<td>Office</td>
<td>@Html.DropDownListFor(a => a.locationId, (IEnumerable<SelectListItem>)ViewBag.OfficeLocEdit)</td>
</tr>
<tr>
<td>Salary</td>
<td>@Html.TextBoxFor(a => a.salary)</td>
</tr>
</tbody>
</table>
}
</div>
控制器代码
[HttpPost]
public ActionResult EditEmployee(EmployeeModel abcde)
{
bool updateResult = new EmployeeProvider().UpdateEmployee(abcde);
return Json(new { result = updateResult }, JsonRequestBehavior.AllowGet);
}
jQuery 代码
$(document).ready(function () {
$('#EditEmployeeMsg').submit(EditEmployeeMessage);
}
);
function EditEmployeeMessage(e) {
e.preventDefault();
$.ajax({
type: this.method,
url: this.action,
data: $(this).serialize(),
success: function (data) {
if (data.result) {
alert('Update Succesfully.');
}
else
alert('Update Failed.');
},
error: function (data) {
alert('Update Failed.');
}
});
}
【问题讨论】:
-
您链接的问题是荒谬的(不是您的错,但它无助于解释您的问题)。在 javascript 中执行两次的操作通常(并非总是)表示意外添加了两次事件监听器。另外,请发布任何相关的代码示例,以便我们了解您的应用程序以及您想要完成的任务。
-
能否请您粘贴您的代码,以便我们为您提供帮助。没有您的代码,我们无法凭空猜测解决方案。
-
我已经编辑并发布了我的代码...,我使用的是 IE11
-
您是否在浏览器控制台中看到任何错误?
标签: jquery asp.net-mvc