Асинхронные конфликты GET / POST и имен действий в ASP.NET MVC - PullRequest
4 голосов
/ 13 декабря 2010

Рекомендованный способ создания страницы редактирования для ASP.NET MVC состоит в том, чтобы на контроллере было два метода с именем «Правка»: одно действие GET и одно действие POST, оба из которых имеют одно и то же имя, но перегружены по-разному.Ошибки проверки отображаются в действии POST, если редактирование завершается неудачно.Затем пользователь может поделиться или добавить в закладки URL-адрес, даже если он отключен от POST: URL возвращается к версии GET по возвращении.

Пока все хорошо.Но есть и асинхронный шаблон ASP.NET на контроллерах .У вас есть EditAsync и EditCompleted.В двух разных методах EditCompleted, как вы отличаете GET от POST?Если вы переименуете действие POST, вы потеряете хорошее поведение, обсуждавшееся ранее.

Есть ли хороший способ заставить эти два шаблона работать вместе?

1 Ответ

6 голосов
/ 13 декабря 2010

Обычно метод XyzAsync () предоставляет методу XyzCompleted () некоторый объект состояния, который сообщает ему, какая единица работы выполняется, поэтому метод XyzCompleted () может проверять этот объект и делать правильные действия.Однако, если вы хотите, чтобы у каждого глагола был свой метод Completed , это возможно с помощью следующего:

[ActionName("Edit"), HttpGet]
public void EditGetAsync() { }

public ActionResult EditGetCompleted() { }

[ActionName("Edit"), HttpPost]
public void EditPostAsync() { }

public ActionResult EditPostCompleted() { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...