在我的MVC应用程序中,我有一个使用HTML帮助函数的网格。 EditorTemplate看起来像;
<tr>
<td>
<%-- Ajax Delete --%>
<% if(Model.LeaveId > 0) { %>
<%: Html.DeleteEmployeeOtherLeave("Delete", Model)%>
<%} %>
</td>
<td><%: Model.LeaveType %></td>
<td><%: Model.MorningOnlyFlag %></td>
<td><%: Model.AfternoonOnlyFlag %></td>
<td><%: Model.DayAmount %></td>
<td><%: String.Format("{0:ddd MMM d yyyy}", Model.Date)%></td>
</tr>
HTML帮助器看起来像;
public static MvcHtmlString DeleteEmployeeOtherLeave(this HtmlHelper html, string linkText, Leave _leave)
{
return html.RouteLink(linkText, "Default",
new { _employeeOtherLeaveId = _leave.LeaveId, action = "Delete" },
new { onclick = "$.ajax({url: this.href, type: 'DELETE', success: function(result) {$('#wholepage').html(result);}}); return false;" }
}
我的控制器看起来像;
[HttpGet]
[Authorize(Roles = "Administrator, AdminAccounts, ManagerAccounts")]
public ActionResult EmployeeAbsence()
{
if ((SessionObjects.AbsenceStartDate > DateTime.MinValue) && (SessionObjects.AbsenceEndDate > DateTime.MinValue))
if (SessionObjects.AbsenceSelectedEmployeeId == 0)
return View(new AbsenceViewModel()
{
AbsenceStartDate = SessionObjects.AbsenceStartDate,
AbsenceEndDate = SessionObjects.AbsenceEndDate
});
else
return View(new AbsenceViewModel(
SessionObjects.AbsenceStartDate,
SessionObjects.AbsenceEndDate,
SessionObjects.AbsenceSelectedEmployeeId
));
return View();
}
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult Delete(int _employeeOtherLeaveId)
{
EmployeeOtherLeaf.Delete(_employeeOtherLeaveId);
return RedirectToAction("EmployeeAbsence");
}
#endregion
使用删除动词在FF中有效,但在IE中无效。用POST替换DELETE动词似乎阻止了它的运行。如何在IE中使用它?
答案 0 :(得分:1)
检查一下。
HTML仅支持GET和POST
所以,正确的事情要做 删除数据库记录是 执行HTTP DELETE操作。 执行HTTP DELETE不会 打开一个安全漏洞,它没有 违反REST原则。
不幸的是,标准HTML没有 支持GET以外的HTTP操作 和POST。链接始终执行GET 并且表单可以执行GET或 POST。 HTML不支持其他 HTTP操作的类型。
根据HTML 3.1 规范,仅限HTML FORM标记 支持GET和POST。它不是 支持其他HTTP操作,如 删除或PUT。看到 http://www.w3.org/TR/REC-html32.html#form。 此外,仅限Internet Explorer 支持GET和POST(参见 http://msdn.microsoft.com/en-us/library/ms534167(VS.85).aspx)。
答案 1 :(得分:1)
两件事:
将DELETE
更改为POST
将无效,因为您的操作方法仅在执行DELETE
时执行:
[AcceptVerbs(HttpVerbs.Delete)]
如果您将其更改为接受POST
,那么就可以。
答案 2 :(得分:0)
IE可能不支持DELETE
次请求。见Problem with jQuery.ajax with 'delete' method in ie