неправильный маршрут действия в методе записи - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть список, выберите запись, нажмите кнопку редактирования и получите обновленный вид (форму) через ajax. Затем я изменяю некоторые свойства и нажимаю сохранить. Эта форма используется как для создания, так и для обновления данных. Я различаю guish в представлении через ViewBag, например:

<form asp-action=@(ViewBag.Mode == "new" ? "AddSender" : "UpdateSender") asp-controller="Sender" method="post">

В вызове ajax я получаю свойства отредактированной модели с этим URL: /MasterData/Sender/UpdateSender/3 ( 3 здесь только пример). Теперь, когда я сохраняю и отправляю данные обратно, действие обновления не срабатывает, поскольку получение html для представления обновления выглядит следующим образом:

<form method="post" action="/MasterData/Sender/UpdateSender/3">

Вопрос в том, почему метод действия, как это? Почему раньше использовали URL-адрес? Я думал, это должно быть просто UpdateSender, как и предполагалось.

Чтобы завершить, вот соответствующие действия в следующем порядке:

[Route("{SenderId}")]
    public IActionResult UpdateSender(long SenderId)
    {
        ViewBag.Mode = "update";
        return PartialView("Sender", SenderRepository.GetSender(SenderId));
    }
    [HttpPost]
    public IActionResult UpdateSender(Sender Sender)
    {
        SenderRepository.UpdateSender(Sender);
        return RedirectToAction(nameof(List));
    }

И у меня есть в верхней части класса контроллера этот атрибут: [Route("MasterData/[controller]/[action]")]

1 Ответ

0 голосов
/ 21 апреля 2020

У действия POST также должен быть маршрут, если предполагается использовать маршрутизацию атрибута.

Добавьте атрибут Route в действие [HttpPost].

[HttpPost]
[Route("UpdateSender")]
public IActionResult UpdateSender(Sender Sender)
{
    SenderRepository.UpdateSender(Sender);
    return RedirectToAction(nameof(List));
}
...