2010-09-14 8 views
6

Каков наилучший способ удалить элемент в MVC? У меня есть список предметов. Каждая строка будет содержать ссылку «Удалить». Я хочу, чтобы ссылка «Удалить» запрашивала подтверждение, а затем удаляла элемент из хранилища данных и обновляла страницу новыми данными.Как удалить элемент с помощью ASP.Net MVC

Вот мой взгляд код:

  <%: Ajax.ActionLink(
       "Delete" 
       ,"Delete" 
       , new { id=item.FooId} 
       , new AjaxOptions() 
       { 
        Confirm="Are you sure that you want to delete this item?" 
        , HttpMethod = "post"}) %> 

И вот мой код контроллера:

[HttpPost] 
    public ActionResult Delete(int id) 
    { 
     try 
     { 
      var success = FooService.Deletefoo(id); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

Запись удаляется, однако страница не обновляется. Единственное, что я могу придумать, это то, что RedirectToAction работает только для разных страниц, а не для одной страницы.

Как получить страницу для обновления?

+1

Сторона примечания: Пожалуйста, не используйте исключения для управления логическим потоком. Это плохая практика по ряду причин. – David

ответ

6

Вы не обновляете страницу, потому что вызов AJAX не будет в честь 302 - RedirectToAction() используется, когда весь браузер обновляется. Если вы собираетесь использовать AJAX для своей ссылки удаления, посмотрите на this post для всего кода примера. В завершение он выполняет javascript window.location.reload(); чтобы обновить страницу. Это следует за PRG pattern.

Другой подход заключается в том, чтобы не использовать AJAX. Здесь an example.

В целом, вы отлично придерживаетесь своего подхода AJAX.

+0

Хорошее объяснение проблемы и ссылка на полное решение. Благодарю. – John

0

Другой способ - удалить элемент управления/html через javascript. Вы можете вызвать этот скрипт, когда ваш запрос Ajax будет завершен.

<%: Ajax.ActionLink(
       "Delete" 
       ,"Delete" 
       , new { id=item.FooId} 
       , new AjaxOptions() 
       { 
        OnSuccess="deleteElement" 
        ,Confirm="Are you sure that you want to delete this item?" 
        , HttpMethod = "post"}) %> 

OnSuccess Option говорит помощник Ajax для вызова метода, когда Ajax запросов будет завершена успешно.

Смежные вопросы