2013-09-15 3 views
0

Я использую действие «Индекс», чтобы показать список записей в сетке, подобной структуре. У меня также есть кнопка «Удалить» в качестве одного из столбцов, который позволяет пользователю удалять определенную строку/запись. Это хорошо работает. У меня также есть ссылка «Сведения» в каждой строке, чтобы увидеть отдельную запись.Пытается удалить запись из действия «Подробности»

Удалить имеет свое действие HttpPost. Подробности также имеют свои собственные регулярные действия.

Проблема: теперь я хочу добавить этот код кнопки «Удалить» в представление «Сведения», но я использую уведомитель, и сам процесс удаления работает, но код показывает уведомитель (потому что есть запись == null проверка в Подробное действие). Я не могу понять, как обойти это.

Вот код:

public ActionResult Index() 
{ 
    ... 
    var myList = _repository.Table; 
    // Nothing else relevant just displays list and sets up model 
    return View(model); 
} 

public ActionResult Details(int id) 
{ 
    ... 
    var record = _repository.Get(id); 

    // If I use the Delete action below then this will get called and fire; 
    // I am trying to figure out how to avoid it firing when I use the Delete code 
    // in the Details view (see .cshtml code below) 
    if (record == null) 
    { 
    _myServices.Notifier.Warning 
      (T("Request not found, please check the URL.")); 

     return RedirectToAction("Index"); 
    } 

    var model = new myViewModel(); 
    model.Id = record.Id; 
    // Pulling other records, nothing special 

    return View(model); 
} 

[HttpPost] 
public ActionResult Delete(int id, string returnUrl) 
{ 
    ... 
    var item = _repository.Get(id); 
    if (item == null) 
    { 
     _myServices.Notifier.Error(T("Inquiry not found.")); 
    } 
    else 
    { 
     _myServices.Notifier.Information(T("Request deleted successfully.")); 
     _repository.Delete(item); 
    } 

    return this.RedirectLocal(returnUrl, "~/"); 
} 

Я задаюсь вопросом, должен ли я создать отдельное действие, как DeleteDetails, но запись = нулевая проверка в действии Подробности бы еще огонь.

Вот код удаления как в индексном и Подробный вид:

@{using (Html.BeginForm("Delete", "MyAdmin", 
    new { area = "MyNameSpace" }, 
    FormMethod.Post, new { @class = "delete-form" })) 
    { 
     @Html.AntiForgeryTokenOrchard() 
     @Html.Hidden("id", Model.Id) 
     @Html.Hidden("returnUrl", Context.Request.ToUrlString()) 
     <input type="submit" value="Delete" /> 
    } 
} 

Может быть, я должен изменить детали просмотра удалить код?

Любые мысли?

+1

Таким образом, действие 'Details' запускается, потому что вы перенаправляете его в действие' Delete', когда вы передаете 'Context.Request.ToUrlString()' для 'returnUrl' в вашем представлении Details. Вероятно, нет смысла возвращаться к представлению Details для записи, которую вы только что удалили, потому что вы столкнетесь с такими ошибками. Обычно я перенаправляю обратно в список в этой ситуации. – asymptoticFault

+0

@asymptoticFault Действие «Удалить» используется как для индекса, так и в индексе, который вы нажмете на кнопку «удалить», и он возвращается в индекс с сообщением о его удалении и отображает обновленный список без запись, которую он удалил) и действия «Сведения». Однако, я взломал вместе, используя действие «Удалить в деталях», поэтому вы правы. Я делаю ошибку. Извините, я не программист. Должен ли я создать новое действие Удалить, специфичное для деталей? Можете ли вы предоставить для этого ответ с кодом? Или мне нужно изменить существующий код на эту учетную запись? – REMESQ

+1

Как просто перенаправить обратно в индекс при удалении из действия «Сведения»? Просто измените значение скрытого 'returnUrl' в вашей' delete-form' на 'Url.Action (« Index »)'. – asymptoticFault

ответ

1

Так что ваш Details запускается действие, потому что вы перенаправляют к нему в вашем Delete действия, когда вы проходите Context.Request.ToUrlString() для returnUrl в вашем Details зрения. Вероятно, нет смысла возвращаться к просмотру Details для записи, которую вы только что удалили, потому что вы столкнетесь с такими ошибками.

Как насчет переадресации обратно на Index, когда вы Delete от Details? Просто измените значение скрытого returnUrl в delete-form на Url.Action("Index"). Учитывая, что ваше действие Details будет перенаправлено на Index, когда запись не существует, имеет смысл сделать это, когда запись будет удалена.

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