Arasındaki fark nedir ViewResult()
ve ActionResult()
ASP.NET MVC?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
Arasındaki fark nedir ViewResult()
ve ActionResult()
ASP.NET MVC?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
Yanıtlar:
ActionResult, birkaç alt türe sahip olabilen soyut bir sınıftır.
ViewResult - Yanıt akışına belirli bir görünüm oluşturur
PartialViewResult - Yanıt akışına belirli bir kısmi görünüm oluşturur
EmptyResult - Boş bir yanıt döndürülür
RedirectResult - Belirtilen bir URL'ye HTTP yeniden yönlendirmesi gerçekleştirir
RedirectToRouteResult - Belirli rota verilerine göre yönlendirme motoru tarafından belirlenen bir URL'ye HTTP yeniden yönlendirmesi gerçekleştirir
JsonResult - Belirli bir ViewData nesnesini JSON biçimine seri hale getirir
JavaScriptResult - İstemcide çalıştırılabilecek bir JavaScript kodu parçası döndürür
ContentResult - Görünüm gerektirmeden içeriği yanıt akışına yazar
FileContentResult - Bir dosyayı istemciye döndürür
FileStreamResult - İstemciye bir Akış tarafından sağlanan dosyayı döndürür
FilePathResult - Bir dosyayı istemciye döndürür
ActionResult soyut bir sınıftır.
ViewResult , ActionResult öğesinden türetilir . Diğer türetilmiş sınıflar arasında JsonResult ve PartialViewResult bulunur .
Bu şekilde beyan edersiniz, böylece polimorfizmden faydalanabilir ve farklı yöntemleri aynı yöntemle döndürebilirsiniz.
Örneğin:
public ActionResult Foo()
{
if (someCondition)
return View(); // returns ViewResult
else
return Json(); // returns JsonResult
}
Aynı nedenle, "nesne" döndürmek için her sınıfın her yöntemini yazmıyorsunuz. Mümkün olduğunca spesifik olmalısınız. Bu, birim testleri yazmayı planlıyorsanız özellikle değerlidir. Artık dönüş tiplerini test etmek ve / veya sonucu yayınlamak yok.
ViewResult, ActionResult'un bir alt sınıfıdır. View yöntemi bir ViewResult döndürür. Yani gerçekten bu iki kod parçacığı aynı şeyi yapıyor. Tek fark, ActionResult biriyle, kontrol cihazınızın bir görünüm döndürmeyi vaat etmemesi - yöntem tanımını değiştirmeden bir RedirectResult veya başka bir şeyi koşullu olarak döndürmek için yöntem gövdesini değiştirebilirsiniz.
Diğer yanıtlar farkları doğru bir şekilde not etmiş olsa da, aslında bir ViewResult döndürüyorsanız, temel ActionResult türünden ziyade yalnızca daha spesifik bir tür döndürmenin daha iyi olduğunu unutmayın. Bu ilkenin bariz bir istisnası, yönteminizin ActionResult öğesinden türeyen birden çok tür döndürmesi.
Bu ilkenin ardındaki nedenlerin tam bir tartışması için lütfen buradaki ilgili tartışmaya bakın: ASP.NET MVC Denetleyici Yöntemleri Geri Dönmeli ActionResult?
Denetleyicide aşağıdaki sözdizimi kullanılabilir
public ViewResult EditEmployee() {
return View();
}
public ActionResult EditEmployee() {
return View();
}
Yukarıdaki örnekte, yalnızca dönüş türü değişir. biri geri dönerken ViewResult
diğeri geri döner ActionResult
.
ActionResult soyut bir sınıftır. Kabul edebilir:
ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult vb.
ViewResult
Bir alt sınıfıdır ActionResult
.
Denetleyici'de MVC'de 11 alt türü olabilen bir temel sınıf olan ActionResult ile aşağıdaki kodu belirttik: 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
}
Benzer şekilde, her bir alt tür yöntemini açıkça belirtmeden ActionResult () kullanarak tüm bu 11 alt türü döndürebiliriz. Farklı görünüm türleri döndürüyorsanız, ActionResult en iyi şeydir.
Burada biraz zaman kazanmak için, https://forums.asp.net/t/1448398.aspx adresindeki önceki yanıttaki bir bağlantıdan gelen yanıt
ActionResult soyut bir sınıftır ve ViewResult sınıfı için temel sınıftır.
MVC çerçevesinde, action yönteminizin döndürdüğü nesneye başvurmak için ActionResult sınıfını kullanır. Ve üzerinde ExecuteResult yöntemini çağırır.
ViewResult da bu soyut sınıf için bir uygulamadır. Verilen görünüm adına göre önceden tanımlanmış bazı yollarda (/ views / controllername /, / views / shared /, vb.) Bir görünüm sayfası (genellikle aspx sayfası) bulmaya çalışır.
Yönteminizin daha spesifik bir sınıf döndürmesini sağlamak genellikle iyi bir uygulamadır. Dolayısıyla, eylem yönteminizin bir görünüm sayfası döndüreceğinden eminseniz ViewResult'u kullanabilirsiniz. Ancak, eylem yönteminizin bir görünüm oluşturma veya yeniden yönlendirme gerçekleştirme gibi farklı davranışları olabilir. Dönüş türü olarak daha genel temel sınıf ActionResult'u kullanabilirsiniz.