none
Чем отличаются ActionResult и ViewResult? RRS feed

Ответы

  • ActionResult - базовый тип, ViewResult - специализированный тип, производный от него, подходящий только если контроллер возвращает View.

    Так например в следующем коде

    public ActionResult OrderDetails(Guid id)
        {
          if(Request.IsAjaxRequest())
          {
            ViewData["changer"] = new ReportsSite.Models.ChangerData().Count() > 0;
            return PartialView("MailsList2", id);
          }
          return View(new OrdersModel().Get(id));
        }
    

    нужно использовать именно ActionResult в качестве возвращаемого значения поскольку в одном случае контроллер возвращает View, а в другом PartialView

    А вот если бы было так:

    public ActionResult OrderDetails(Guid id)
        {
          
          return View(new OrdersModel().Get(id));
        }
    

    то такой код можно было бы заменить на

    public ViewResult OrderDetails(Guid id)
        {
          
          return View(new OrdersModel().Get(id));
        }
    

     

    • Предложено в качестве ответа PeremeyWebs 27 мая 2011 г. 10:21
    • Помечено в качестве ответа Abolmasov DmitryModerator 26 июля 2011 г. 14:02
  • Правила хорошего тона в программировании на языках со строгой типизацией утверждают что нужно оперировать типами как можно более частными. Т.е. согласно этому тону это делать нужно.

    Лично я в данном конкретном случае этого не делаю.

    Делаю иногда и для таких типов как JsonResult, чтобы сразу видеть, где у меня методы, которые не имеют значения для людей с отключенным js

Все ответы

  • ActionResult - базовый тип, ViewResult - специализированный тип, производный от него, подходящий только если контроллер возвращает View.

    Так например в следующем коде

    public ActionResult OrderDetails(Guid id)
        {
          if(Request.IsAjaxRequest())
          {
            ViewData["changer"] = new ReportsSite.Models.ChangerData().Count() > 0;
            return PartialView("MailsList2", id);
          }
          return View(new OrdersModel().Get(id));
        }
    

    нужно использовать именно ActionResult в качестве возвращаемого значения поскольку в одном случае контроллер возвращает View, а в другом PartialView

    А вот если бы было так:

    public ActionResult OrderDetails(Guid id)
        {
          
          return View(new OrdersModel().Get(id));
        }
    

    то такой код можно было бы заменить на

    public ViewResult OrderDetails(Guid id)
        {
          
          return View(new OrdersModel().Get(id));
        }
    

     

    • Предложено в качестве ответа PeremeyWebs 27 мая 2011 г. 10:21
    • Помечено в качестве ответа Abolmasov DmitryModerator 26 июля 2011 г. 14:02
  • ТО ЧТО МОЖНО - ЭТО ПОНЯТНО, А ВОТ НУЖНО ЛИ?
  • Правила хорошего тона в программировании на языках со строгой типизацией утверждают что нужно оперировать типами как можно более частными. Т.е. согласно этому тону это делать нужно.

    Лично я в данном конкретном случае этого не делаю.

    Делаю иногда и для таких типов как JsonResult, чтобы сразу видеть, где у меня методы, которые не имеют значения для людей с отключенным js