Я использую действие «Индекс», чтобы показать список записей в сетке, подобной структуре. У меня также есть кнопка «Удалить» в качестве одного из столбцов, который позволяет пользователю удалять определенную строку/запись. Это хорошо работает. У меня также есть ссылка «Сведения» в каждой строке, чтобы увидеть отдельную запись.Пытается удалить запись из действия «Подробности»
Удалить имеет свое действие 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" />
}
}
Может быть, я должен изменить детали просмотра удалить код?
Любые мысли?
Таким образом, действие 'Details' запускается, потому что вы перенаправляете его в действие' Delete', когда вы передаете 'Context.Request.ToUrlString()' для 'returnUrl' в вашем представлении Details. Вероятно, нет смысла возвращаться к представлению Details для записи, которую вы только что удалили, потому что вы столкнетесь с такими ошибками. Обычно я перенаправляю обратно в список в этой ситуации. – asymptoticFault
@asymptoticFault Действие «Удалить» используется как для индекса, так и в индексе, который вы нажмете на кнопку «удалить», и он возвращается в индекс с сообщением о его удалении и отображает обновленный список без запись, которую он удалил) и действия «Сведения». Однако, я взломал вместе, используя действие «Удалить в деталях», поэтому вы правы. Я делаю ошибку. Извините, я не программист. Должен ли я создать новое действие Удалить, специфичное для деталей? Можете ли вы предоставить для этого ответ с кодом? Или мне нужно изменить существующий код на эту учетную запись? – REMESQ
Как просто перенаправить обратно в индекс при удалении из действия «Сведения»? Просто измените значение скрытого 'returnUrl' в вашей' delete-form' на 'Url.Action (« Index »)'. – asymptoticFault