2010-03-20 9 views

Respuesta

12

ActionResult es la clase base general de la que se derivan todos los demás resultados, como ViewResult, JsonResult y así sucesivamente.

De esta manera puede devolver múltiples tipos de resultados como JSON y XML desde el mismo método.

+2

¿Hace alguna diferencia, como por ejemplo la página se renderizará más rápido, o va a haber menos memoria utilizada con ViewResult en lugar de ActionResult o algo así? – Omu

+0

No, realmente no importa en absoluto. La convención MVC de ASP.NET está haciendo que el tipo de retorno sea 'ActionResult' y usted devuelve un tipo derivado. –

4

Debe usar ViewResult para hacer que el código sea más legible y encuentre errores más fáciles, pero también puede haber otros beneficios.

Como utilizo el patrón POST-REDIRECT-GET, escribí algunas pruebas para comprobar si cada método [HttpPost] devuelve RedirectToRouteResult. Si defino otro tipo de resultado en el método [HttpPost], automáticamente no pasa la prueba. Esto me impide devolver View (modelo) en el método de publicación.

0

Si desea realizar pruebas unitarias, cámbielo en el controlador de ActionResult a ViewResult. Entonces tendrás el intellisense en tu Controlador de Prueba y la vida es buena.

0

Acabo de recibir accidentalmente la misma pregunta hace algunos días y Google vino a ayudarlo rápidamente. Básicamente no hay ningún problema de rendimiento aquí, es problema de codificación, si alguno.

Esta es una breve pero útil post: http://www.techiesblog.com/post/2862100163/viewresult-vs-actionresult-asp-net-mvc

+0

Ese enlace no es muy útil, ya que requiere que ingrese una contraseña antes de poder ver la página, pero no ofrece ninguna forma de registrarse en el sitio. – DOK

+0

No fue en el momento en que contesté aquí. Parece que no es un formulario de inicio de sesión como de costumbre, el autor probablemente hizo su blog privado. –

6

Es por la misma razón no se escribe todos los métodos de cada clase para volver "objeto". Debes ser tan específico como puedas. Esto es especialmente valioso si planea escribir pruebas unitarias. No más tipos de devolución de prueba y/o emitiendo el resultado.

+0

Si es demasiado específico, relacionará sus métodos con su implementación. Por ejemplo, devuelva 'IEnumerable ' en lugar de 'T []' permite la devolución de matrices, colecciones, listas, etc. Proporcione suficiente contexto para mover al desarrollador, mientras le permite cambiar el diseño debajo. ¿Pero hay alguna razón por la que escribirías una prueba para verificar que el tipo de devolución es 'ViewResult', cuando el método se declara como' 'ViewResult''? Si fuera 'ActionResult', entonces tendría valor. –

Cuestiones relacionadas