Аналогично, мы можем вернуть все эти 11 подтипов, используя ActionResult (), не указывая явно каждый метод подтипа. ActionResult - лучшая вещь, если вы возвращаете различные типы представлений.

разница междуViewResult() а такжеActionResult() в ASP.NET MVC?

public ViewResult Index()
{
    return View();
}

public ActionResult Index()
{
    return View();
}
 user388592718 июн. 2015 г., 19:24
Вероятно, эта документация полезна :)msdn.microsoft.com/en-us/library/...
 Doug Chamberlain31 янв. 2012 г., 20:36
Отличный вопрос Я посмотрел видео и для создания модульных тестов инструктор сначала изменил тип возвращаемого действия, которое он собирался протестировать, с ActionResult на ViewResult. Без объяснения .... Я был как "Что мы можем просто случайно изменить типы? Без объяснения"

Ответы на вопрос(6)

который является базовым классом, который может иметь 11 подтипов в MVC, таких как: ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePreamResult, FilePreeult.

    public ActionResult Index()
                {
                    if (HttpContext.Session["LoggedInUser"] == null)
                    {
                        return RedirectToAction("Login", "Home");
                    }

                    else
                    {
                        return View(); // returns ViewResult
                    }

                }
//More Examples

    [HttpPost]
    public ActionResult Index(string Name)
    {
     ViewBag.Message = "Hello";
     return Redirect("Account/Login"); //returns RedirectResult
    }

    [HttpPost]
    public ActionResult Index(string Name)
    {
    return RedirectToRoute("RouteName"); // returns RedirectToRouteResult
    }

Аналогично, мы можем вернуть все эти 11 подтипов, используя ActionResult (), не указывая явно каждый метод подтипа. ActionResult - лучшая вещь, если вы возвращаете различные типы представлений.

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

Для полного обсуждения причин этого принципа, пожалуйста, смотрите соответствующее обсуждение здесь:Должны ли методы ASP.NET MVC Controller возвращать ActionResult?

В контроллере можно использовать следующий синтаксис

public ViewResult EditEmployee() {
    return View();
}

public ActionResult EditEmployee() {
    return View();
}

В приведенном выше примере изменяется только тип возвращаемого значения. один возвращаетсяViewResult тогда как другой возвращаетсяActionResult.

ActionResult - это абстрактный класс. Он может принять:

ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult и т. Д.

ViewResult это подклассActionResult.

 Andrew05 мая 2015 г., 08:12
Я не уверен, что это то, что вы имели в виду, но на всякий случай я хочу уточнить, что вы не можете использовать эти два метода одновременно, так как их имя и (нет) параметры совпадают. Перегрузить метод невозможно, только изменив тип результата.

по которой вы не пишете каждый метод каждого класса для возврата «объекта». Вы должны быть как можно более конкретны. Это особенно ценно, если вы планируете писать модульные тесты. Больше не нужно тестировать возвращаемые типы и / или приводить результат.

 JoshYates198015 июн. 2016 г., 18:30
Более чистый код и модульное тестирование - это преимущество использования ViewResult, основанное на моем опыте.

wResult. Так что на самом деле эти два фрагмента кода делают одно и то же. Единственное отличие состоит в том, что с ActionResult ваш контроллер не обещает возвращать представление - вы можете изменить тело метода для условного возврата RedirectResult или чего-то еще без изменения определения метода.

ActionResult это абстрактный класс.

ViewResult происходит отActionResult, Другие производные классы включаютJsonResult а такжеPartialViewResult.

Вы объявляете это таким образом, чтобы использовать полиморфизм и возвращать разные типы в одном и том же методе.

например:

public ActionResult Foo()
{
   if (someCondition)
     return View(); // returns ViewResult
   else
     return Json(); // returns JsonResult
}
 Adarsh Kumar09 дек. 2013 г., 04:55
Означает ли это, что мы всегда должны возвращать ActionResult, чтобы получить его преимущество? Или есть какое-то ограничение или побочный эффект этого?
 RPM198409 дек. 2013 г., 22:08
@Adarsh ​​- то же самое с любым абстрактным классом в C #. Объявите это таким образом, если вы хотите инкапсулировать реализацию внутри метода или хотите в будущем проверить свой API для других производных типов. Если нет, используйте бетон. Я обычно использую бетон (например, ViewResult или JsonResult)

Ваш ответ на вопрос