Одно действие контроллера для полной обратной передачи и обратной передачи AJAX или разделено на два действия? - PullRequest
1 голос
/ 02 января 2012

Если мы обрабатываем обычную (полную) обратную передачу и обратную передачу AJAX в одном действии контроллера, очень вероятно, что метод будет огромным. Множество if..else предложений, обрабатывающих возвраты (возврат обычных представлений против частичных представлений против строк успеха JSON), различная обработка ModelState ошибок и т. Д.

Однако разделение его на два действия, например Create и CreateAjax, означает, что необходимо поддерживать два экземпляра аналогичного кода.

Что вы рекомендуете сделать действия простыми, но при этом охватить оба сценария обратной передачи?

Ответы [ 3 ]

4 голосов
/ 02 января 2012

У меня было бы два метода, Create и CreateAjax, и я бы посмотрел на рефакторинг кода, чтобы любой дублирующий код был помещен во вспомогательный класс или службу.

0 голосов
/ 02 января 2012

Существует множество опций, вы можете справиться с ними одним действием, например:

public ActionResult DoSomething(...)
{
    if (Request.IsAjaxRequest())
        return DoSomethingAjax(..);
    else
       return DoSomethingStandard(..);
}

private ActionResult DoSomethingAjax(..) { }

private ActionResult DoSomethingStandard(..) { }

Вы можете создать некоторый фабричный компонент, который выполняет работу, и вызывает из двух методов:

public ActionResult DoSomething()
{
    return DoSomethingFactory.Do();
}

public ActionResult DoSomethingAjax()
{
    return DoSomethingFactory.Do();
}

Вы можете разделить обработчики действий обратной передачи и обработчики AJAX, используя частичный класс.

Некоторые идеи.

0 голосов
/ 02 января 2012

Я бы предложил перенести весь код, отвечающий за часть AJAX, в отдельный ActionResult, который выглядит чистым.

...