1) если я удаляю объект с помощью браузера Firefox, то jAlert («Ответ был удален успешно», «Подтверждение удаления»);не будет отображаться, в то время как это будет показано с использованием IE, в чем может быть причина?
В вашем действии контроллера Delete
вы возвращаете пустой контент (return Content("")
), и все же выопределили UpdateTargetId = @answer.AnswersID.ToString()
в вашей ссылке, что заставляет Firefox выдавать ошибку, потому что вы не можете вставить пустой контент в DOM - это просто не имеет смысла.Я думаю, что IE немного более терпим к такого рода ошибкам.Я предполагаю, что в IE, хотя вы не получаете сообщение об ошибке, данный элемент DOM вообще не обновляется после удаления.
Так что вам придется возвращать некоторый фактический контент, такой как частичное представление изВаше действие по удалению контроллера:
[HttpPost]
public ActionResult Delete(int id)
{
var a = repository.FindAnswer(id);
repository.DeleteAnswer(a);
repository.Save();
return PartialView("_Foo");
}
Теперь содержимое этого частичного представления будет использоваться для обновления данного элемента DOM.
2) я перехожу к предполагаемой веб-странице, гдепоказать объект ответа, затем я вручную удаляю объект ответа из базы данных, после чего я нажимаю на ссылку удаления ajax за удаленным объектом (до обновления страницы), поэтому я ожидал, что сценарий onfailure будет выполнен, но он это сделалнет, скорее возникло нулевое исключение.
Если на стороне сервера выдается исключение и возвращается код состояния HTTP 500, будет вызван обратный вызов OnFailure.Если, с другой стороны, вы обрабатываете это исключение на сервере и используете его, не передавая его для распространения и возвращая код состояния HTTP 200, это будет обратный вызов OnSuccess
, который будет выполнен, даже если на сервере произошла ошибка.
3) Есть ли способ предоставить поле подтверждения jquery вместо подтверждения = "Вы уверены, что хотите удалить этот ответ?"
Конечно, просто используйте OnBegin
вместо Confirm
:
@Ajax.ActionLink(
"Delete",
"Delete",
"Answer",
new { id = answer.AnswersID },
new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = answer.AnswersID.ToString(),
OnBegin = "deletebegin",
OnSuccess = "deleteconfirmation",
OnFailure = "deletionerror"
}
)
и в вашем deletebegin
обратном вызове:
function deletebegin() {
// Show whatever confirmation you want here and return true
// to proceed with the AJAX request and false to cancel it.
// As an example I am using the standard confirm js method but
// you could really use whatever you like
var shouldProceed = confirm('Are You sure You want to delete this Answer ?');
return shouldProceed;
}