Я хочу удалить строку из моей сетки. Я обнаружил, что не могу украсить свой метод Delete на моем контроллере с помощью [HttpDelete], потому что он не совместим с разными браузерами, см. http://forums.asp.net/t/1658625.aspx/1?The+DELETE+Http+works+in+FF+but+not+in+IE
Я отображаю сетку, используя этот шаблон Editor;
<tr>
<td>
<%-- Ajax Delete --%>
<% if(Model.LeaveId > 0) { %>
<%: Html.DeleteEmployeeOtherLeave("/Employee/Delete/" + Model.LeaveId.ToString(), 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-помощник вызывает функцию javascript;
function DeleteRow(href) {
var flag = confirm('Are you sure you wish to delete this item?');
if (flag == true) {
$.ajax({
url: href,
type: 'POST',
success: function (result) {
$('#wholepage').html(result);
}
});
}
return false;
Эта функция выполняется, и намерение состоит в том, чтобы вызвать метод Delete на моем контроллере;
#region Absence (including sickness)
[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();
}
[HttpPost]
public ActionResult EmployeeAbsence(AbsenceViewModel _avm)
{
if (ModelState.IsValid)
{
SessionObjects.AbsenceStartDate = _avm.AbsenceStartDate;
SessionObjects.AbsenceEndDate = _avm.AbsenceEndDate;
if (_avm.SearchTextId > 0)
SessionObjects.AbsenceSelectedEmployeeId = _avm.SearchTextId;
return RedirectToAction("EmployeeAbsence");
}
return View(_avm);
}
[HttpPost]
public ActionResult Delete(int id)
{
EmployeeOtherLeaf.Delete(id);
return RedirectToAction("EmployeeAbsence");
}
#endregion
Метод Delete не вызывается.
Меня спросили о ссылке удаления, которая, по моему мнению, работает, потому что я поставил точку останова в FireFox, но здесь она определяется в методе HtmlHelper.
public static MvcHtmlString DeleteEmployeeOtherLeave(this HtmlHelper html, string url, Leave _leave)
{
string linkText = "Delete";
return html.RouteLink(linkText, "Default",
new { _employeeOtherLeaveId = _leave.LeaveId, action = "Delete" },
new { onclick = "DeleteRow('" + url + "')" }
);
}