Большинство приложений MVC используют действия контроллера для действий Ajax.
Я думаю, «почему» в том, что вы используете свой набор навыков и инфраструктуру MVC. Все, что вы делаете в приложении, соответствует модели MVC, почему бы не включить в него и Ajax? Это просто очень естественный паттерн.
На сервере я часто забываю, вызвано ли действие Ajax или нет. Я думаю, что это очень хорошая вещь. Метод вызова действия - отдельная проблема от того, что делает действие. Это особенно верно, когда вы используете прогрессивное улучшение (Ajax для Javascript включен, http post для не-js). Тогда шаблон выглядит примерно так: Мне очень нравится, что я могу забыть о механизме общения и сосредоточиться на том, что должно делать мое приложение.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyProgressiveEnhancedAction(FormCollection form)
{
// Handle Html Post
if (!Request.IsAjaxRequest())
return ActionViaHtmlPost();
// Ajax Invocation
...
Когда я использую этот шаблон, я часто обнаруживаю, что у меня есть немного клея, чтобы абстрагировать Ajax от Post, а остальные (модель, доменные взаимодействия и т. Д.) Являются общими.