.NET MVC Razor Post Action - Ошибка сервера в '/' - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь исправить эту «Ошибка сервера в» / «Приложении» в чужом коде.Я предполагаю, что они пытались сделать что-то умное и никогда не работали, или что-то изменилось, чтобы заставить его перестать работать.Однако я понятия не имею, сработало ли это когда-либо.

Позвольте мне показать вам код и объяснить поведение, и, надеюсь, кто-нибудь здесь сможет помочь мне решить эту проблему.Заранее спасибо.

Код

На форме есть кнопка Удалить:

 <a href='@Url.Action("Delete", new { queryId = uq.Id })' class="button small" title="Click to delete this query">Delete</a>

Предполагается выполнить следующий метод контроллера.

    [HttpPost]
    public ActionResult Delete(int? queryId)
    {
        var userId = CurrentUser.Id;
        UserQueryService uqs = new UserQueryService();
        uqs.Delete(userId, (int)queryId);
        return View("Index", new UserQueryService().GetByUserId(userId));
    }

Но исполнение никогда не попадет в метод.Вместо этого я получаю следующую информацию.

Error Details

Tried

Итак, я удалил параметр queryId как из ссылки href, так и из контроллераи просто сделал это действие (не пост).Вот мой тестовый код:

<a href='@Url.Action("Delete")' class="button small" title="Click to delete this query">Delete</a>

Выполнение попало в контроллер.

    //test method
    public ActionResult Delete()
    {
        var userId = CurrentUser.Id;
        UserQueryService uqs = new UserQueryService();
        return View("Index", new UserQueryService().GetByUserId(userId));
    }

Может кто-нибудь сказать мне, что не так с кодом передачи параметров, который делаетэто не найти метод контроллера?

1 Ответ

0 голосов
/ 01 июня 2018

Вы не можете сделать HttpPost, если это не в форме.

Читая ваш код, кажется, что кнопка удаления находится не внутри формы, поэтому выдает ошибку 404.

Замените ваш ActionVerb с HttpPost на HttpGet:

[HttpGet] //Change this from HttpPost to HttpGet.
public ActionResult Delete(int? queryId)
{
    var userId = CurrentUser.Id;
    UserQueryService uqs = new UserQueryService();
    uqs.Delete(userId, (int)queryId);
    return View("Index", new UserQueryService().GetByUserId(userId));
}
...