Должен ASP.NET возврат методов контроллера MVC ActionResult?

Vagrant-lxc - это плагин для Vagrant, который позволяет вам использовать LXC для предоставления Vagrant. Он не обладает всеми функциями, которыми обладает стандартная бродячая виртуальная машина (VirtualBox), но он должен обеспечивать большую гибкость, чем контейнеры Docker. В ссылке есть видео, показывающее его возможности, которые стоит посмотреть.

57
задан HerbalMart 4 December 2014 в 13:14
поделиться

5 ответов

Вы можете абсолютно точно использовать определенные типы возвращаемых данных, хотя большинство примеров в Интернете, кажется, возвращают ActionResult . Единственный раз, когда я мог бы вернуть класс ActionResult , это когда разные пути метода действия возвращают разные подтипы.

Стивен Сандерсон также рекомендует возвращать определенные типы в своей книге Pro ASP.NET MVC Framework . Взгляните на цитату ниже:

Этот метод действия специально заявляет, что он возвращает экземпляр ViewResult. Он будет работать точно так же, если вместо этого метод Тип возвращаемого значения - ActionResult (базовый класс для всех результатов действия). Фактически, некоторые программисты ASP.NET MVC объявляют все свои методы действий как возвращающий неспецифический ActionResult, даже если они точно знают что он всегда будет возвращать один конкретный подкласс. Однако это устоявшийся принцип объектно-ориентированного программирования, согласно которому методы должны возвращать наиболее конкретный тип, который они могут (а также принимать наиболее общие типы параметров, которые они могут). Следуя этому принципу максимизирует удобство и гибкость кода, вызывающего ваш метод, например, ваши модульные тесты.

58
ответ дан 24 November 2019 в 19:39
поделиться

Всегда возвращайте наиболее точный тип, который вы можете вернуть. Таким образом, вы должны вернуть ViewResult, когда действие всегда отображает представление. Я бы использовал ActionResult только при возврате в ViewResult в некоторых случаях (неверные опубликованные данные) или RedirectToRouteResult в других случаях.

С помощью некоторых расширенных сценариев фильтрации действий / выполнения вы даже можете возвращать совершенно разные вещи, не имеющие ничего общего с ActionResult.

13
ответ дан 24 November 2019 в 19:39
поделиться

[Частичный ответ]: вы не всегда возвращаете ActionResult, нет. Вот краткий обзор некоторых других результатов, которые вы можете вернуть: http://msdn.microsoft.com/en-us/library/dd410269%28v=vs.98%29.aspx

Может быть, это поможет немного. Удачи!

8
ответ дан 24 November 2019 в 19:39
поделиться

ActionResult - это базовый класс для различных типов возвращаемых данных. Таким образом, ваше действие должно возвращать ActionResult или производный от него класс , чтобы работать. Обычными являются ViewResult , JsonResult и т. Д.

3
ответ дан 24 November 2019 в 19:39
поделиться

Да, вы можете определить свое действие, например: public ViewResult Index () . Но иногда ваше действие может возвращать разные результаты (это невозможно без объявления результата как базового класса ActionResult ). Например:

public ActionResult Show()
{
    ...

    if(Request.IsAjaxRequest())
    {
        return PartialView(...);
    }

    return View(...);
}

или:

public ActionResult Show()
{
    ...

    try
    {
        ...
    }
    catch(Exception)
    {
        return RedirectToAction(...);
    }

    return View(...);
}
7
ответ дан 24 November 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: