Różnica między viewresult () a ActionResult()
Jaka jest różnica między ViewResult()
A ActionResult()
w ASP.NET MVC?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
7 answers
ActionResult jest klasą abstrakcyjną, która może mieć kilka podtypów.
Podtypy ActionResult
-
ViewResult - renderuje określony widok do strumienia odpowiedzi
-
PartialViewResult - renderuje określony częściowy widok do strumienia odpowiedzi
-
EmptyResult - zwracana jest pusta odpowiedź
-
RedirectResult - wykonuje przekierowanie HTTP do określonego URL
-
RedirectToRouteResult - wykonuje przekierowanie HTTP na adres URL określony przez silnik trasowania na podstawie danych o trasie
-
JsonResult - serializuje dany obiekt ViewData do formatu JSON
-
JavaScriptResult - zwraca fragment kodu JavaScript, który można wykonać na kliencie
-
ContentResult - zapisuje zawartość do strumienia odpowiedzi bez konieczności widok
-
FileContentResult - zwraca plik do Klienta
-
FileStreamResult - zwraca klientowi plik, który jest dostarczany przez strumień
-
FilePathResult - zwraca plik do Klienta
Zasoby
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-10 14:48:18
ActionResult jest klasą abstrakcyjną.
Viewresult wywodzi się z ActionResult . Inne klasy pochodne to JsonResult i PartialViewResult .
Deklarujesz to w ten sposób, więc możesz skorzystać z polimorfizmu i zwrócić różne typy w tej samej metodzie.
Np:
public ActionResult Foo()
{
if (someCondition)
return View(); // returns ViewResult
else
return Json(); // returns JsonResult
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-20 05:30:58
Z tego samego powodu nie zapisujesz każdej metody każdej klasy, aby zwracała "obiekt". Powinieneś być tak dokładny, jak tylko możesz. Jest to szczególnie cenne, jeśli planujesz pisać testy jednostkowe. Koniec z testowaniem typów zwrotów i / lub odlewaniem wyniku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-06 18:59:18
ViewResult jest podklasą ActionResult. Metoda View zwraca ViewResult. Tak naprawdę te dwa fragmenty kodu robią dokładnie to samo. Jedyną różnicą jest to, że w przypadku ActionResult kontroler nie obiecuje zwracania widoku - można zmienić treść metody na warunkowo zwracającą RedirectResult lub coś innego bez zmiany definicji metody.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-20 05:33:50
Podczas gdy inne odpowiedzi poprawnie zauważyły różnice, zauważ, że jeśli w rzeczywistości zwracasz tylko ViewResult, lepiej jest zwrócić bardziej konkretny typ, a nie podstawowy typ ActionResult. Oczywistym wyjątkiem od tej zasady jest sytuacja, gdy metoda zwraca wiele typów pochodzących z ActionResult.
Aby uzyskać pełne omówienie przyczyn tej zasady, zobacz pokrewną dyskusję tutaj: Must ASP.NET MVC Controller Methods Return ActionResult?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:10
W kontrolerze można użyć poniższej składni
public ViewResult EditEmployee() {
return View();
}
public ActionResult EditEmployee() {
return View();
}
W powyższym przykładzie zmienia się tylko Typ zwrotu . jeden zwraca ViewResult
podczas gdy drugi zwraca ActionResult
.
ActionResult jest klasą abstrakcyjną . Może przyjąć:
ViewResult, PartialViewResult, EmptyResult , RedirectResult , RedirectToRouteResult, JsonResult , JavaScriptResult, ContentResult , FileContentResult , FileStreamResult, FilePathResult itd.
ViewResult
jest podklasą ActionResult
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 11:21:53
W kontrolerze podałem poniższy kod z ActionResult, który jest klasą bazową, która może mieć 11 podtypów w MVC jak: ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult.
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
}
Podobnie możemy zwrócić wszystkie te 11 podtypów używając metody ActionResult () bez jawnego określania każdego podtypu. ActionResult jest najlepszą rzeczą, jeśli jesteś zwracanie różnych typów widoków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 17:42:27