ASP.NET MVC में ViewResult()
और क्या अंतर है ActionResult()
?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
ASP.NET MVC में ViewResult()
और क्या अंतर है ActionResult()
?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
जवाबों:
ActionResult एक अमूर्त वर्ग है जिसमें कई उपप्रकार हो सकते हैं।
ViewResult - प्रतिक्रिया स्ट्रीम में एक निर्दिष्ट दृश्य प्रस्तुत करता है
PartialViewResult - रेंडर प्रतिक्रिया स्ट्रीम के लिए एक आंशिक दृश्य निर्दिष्ट करता है
EmptyResult - एक खाली प्रतिक्रिया लौटा दी जाती है
RedirectResult - एक निर्दिष्ट URL के लिए एक HTTP पुनर्निर्देशन करता है
RedirectToRouteResult - एक URL पर एक HTTP पुनर्निर्देशन करता है जो रूट इंजन द्वारा निर्धारित रूट डेटा के आधार पर निर्धारित किया जाता है
JsonResult - JSON प्रारूप में किसी दिए गए ViewData ऑब्जेक्ट को सीरियल करता है
JavaScriptResult - क्लाइंट पर निष्पादित किए जा सकने वाले JavaScript कोड का एक टुकड़ा लौटाता है
ContentResult - एक दृश्य की आवश्यकता के बिना प्रतिक्रिया स्ट्रीम में सामग्री लिखता है
FileContentResult - क्लाइंट को एक फ़ाइल लौटाता है
FileStreamResult - क्लाइंट को एक फाइल लौटाता है, जो कि स्ट्रीम द्वारा प्रदान की जाती है
FilePathResult - क्लाइंट को एक फ़ाइल लौटाता है
ActionResult एक अमूर्त वर्ग है।
ViewResult से निकला ActionResult । अन्य व्युत्पन्न वर्ग में शामिल हैं JsonResult और PartialViewResult ।
आप इसे इस तरह से घोषित करते हैं ताकि आप बहुरूपता का लाभ उठा सकें और एक ही तरीके से विभिन्न प्रकारों को वापस कर सकें।
उदाहरण के लिए:
public ActionResult Foo()
{
if (someCondition)
return View(); // returns ViewResult
else
return Json(); // returns JsonResult
}
यह उसी कारण से है कि आप "ऑब्जेक्ट" को वापस करने के लिए हर वर्ग की हर विधि नहीं लिखते हैं। आपको जितना हो सके उतना विशिष्ट होना चाहिए। यदि आप इकाई परीक्षण लिखने की योजना बना रहे हैं तो यह विशेष रूप से मूल्यवान है। कोई और अधिक परीक्षण रिटर्न प्रकार और / या परिणाम कास्टिंग।
ViewResult ActionResult का एक उपवर्ग है। दृश्य विधि एक ViewResult देता है। तो वास्तव में ये दोनों कोड स्निपेट सटीक काम करते हैं। एकमात्र अंतर यह है कि ActionResult एक के साथ, आपका नियंत्रक एक दृश्य वापस करने का वादा नहीं कर रहा है - आप विधि परिभाषा को बदले बिना किसी पुनर्निर्देशन या कुछ और तरीके से सशर्त रूप से वापस करने के लिए विधि बॉडी को बदल सकते हैं।
हालांकि अन्य उत्तरों ने अंतरों को सही ढंग से नोट किया है, ध्यान दें कि यदि आप वास्तव में ViewResult लौटा रहे हैं तो आधार ActionResult प्रकार के बजाय अधिक विशिष्ट प्रकार को वापस करना बेहतर है। इस सिद्धांत का एक स्पष्ट अपवाद यह है कि जब आपका तरीका ActionResult से कई प्रकार का रिटर्न देता है।
इस सिद्धांत के पीछे के कारणों की पूरी चर्चा के लिए कृपया संबंधित चर्चा यहाँ देखें: ASP.NET MVC कंट्रोलर मेथड्स एक्शनResult?
नियंत्रक में, कोई नीचे सिंटैक्स का उपयोग कर सकता है
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
।
नियंत्रक में मैंने नीचे दिए कोड को ActionResult के साथ निर्दिष्ट किया है जो एक आधार वर्ग है जो MVC में 11 उपप्रकार हो सकते हैं जैसे: ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FileResreamult।
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 सबसे अच्छी बात है।
आपको कुछ समय बचाने के लिए https://forums.asp.net/t/144839..xx पर पिछले उत्तर के लिंक से उत्तर देना है।
ActionResult एक अमूर्त वर्ग है, और यह ViewResult वर्ग के लिए आधार वर्ग है।
MVC फ्रेमवर्क में, यह आपके एक्शन मेथड रिटर्न के ऑब्जेक्ट को संदर्भित करने के लिए ActionResult क्लास का उपयोग करता है। और उस पर ExecuteResult विधि लागू करता है।
और ViewResult इस अमूर्त वर्ग के लिए एक कार्यान्वयन है। यह दिए गए दृश्य नाम से कुछ पूर्वनिर्धारित रास्तों (/ विचारों / नियंत्रकों /, / विचारों / साझा / आदि) में एक पृष्ठ (आमतौर पर एस्पक्स पृष्ठ) खोजने की कोशिश करेगा।
यह आमतौर पर एक अच्छा अभ्यास है कि आपकी विधि एक अधिक विशिष्ट वर्ग लौटाए। इसलिए यदि आप सुनिश्चित हैं कि आपकी कार्रवाई विधि कुछ दृश्य पृष्ठ लौटाएगी, तो आप ViewResult का उपयोग कर सकते हैं। लेकिन अगर आपके एक्शन मेथड में भिन्न व्यवहार हो सकता है, जैसे या तो एक दृश्य प्रस्तुत करना या पुनर्निर्देशन करना। आप रिटर्न प्रकार के रूप में अधिक सामान्य आधार वर्ग ActionResult का उपयोग कर सकते हैं।