Ответ 1
ActionResult
- это общий базовый класс, в котором все остальные результаты получены из таких ViewResult
, JsonResult
и т.д.
Таким образом вы можете возвращать несколько типов результатов, таких как JSON и XML, из того же метода.
В asp.net mvc есть ViewResult для возврата View и ActionResult для возврата того, что вы хотите, так что есть ли веская причина, почему я должен использовать ViewResult вместо ActionResult, когда я уверен, что вернусь к View?
ActionResult
- это общий базовый класс, в котором все остальные результаты получены из таких ViewResult
, JsonResult
и т.д.
Таким образом вы можете возвращать несколько типов результатов, таких как JSON и XML, из того же метода.
По той же причине вы не пишете каждый метод каждого класса, чтобы вернуть "объект". Вы должны быть настолько конкретны, насколько сможете. Это особенно ценно, если вы планируете писать модульные тесты. Больше не нужно тестировать возвращаемые типы и/или выдавать результат.
Вы должны использовать ViewResult, чтобы сделать код более читаемым и найти ошибки, но могут быть и другие преимущества.
Поскольку я использую шаблон POST-REDIRECT-GET, я написал несколько тестов, чтобы проверить, возвращает ли каждый метод [HttpPost] RedirectToRouteResult. Если я определяю другой тип результата в методе [HttpPost], он автоматически не проходит тест. Это не позволяет мне возвращать View (model) в методе post.
Если вы хотите выполнить модульное тестирование, измените его в контроллере с ActionResult на ViewResult. Тогда у вас будет intellisense в вашем тестовом контроллере, и жизнь будет хорошей.
Я просто случайно получил тот же вопрос несколько дней назад, и Google быстро помог. В принципе, здесь нет проблем с производительностью, это проблема с кодированием, если таковая имеется.
Это короткое, но полезное сообщение в блоге: http://www.techiesblog.com/post/2862100163/viewresult-vs-actionresult-asp-net-mvc