En una aplicación MVC3, ¿se considera una mala práctica utilizar un bloque try catch dentro de un bloque de afeitar @{ }
en la vista .cshtml
?¿Está intentando atrapar en una mala práctica de la vista?
Respuesta
Mucho.
Las vistas no deben contener ninguna lógica real; cualquier cosa que pueda lanzar una excepción pertenece al controlador.
Las afirmaciones generales como esta nunca son precisas. ¿Estás diciendo que es mala forma poner un código en una vista? Entonces, ¿por qué existe Razor? Y si tiene código en una vista, ciertamente puede haber casos donde las excepciones (como la falta de disponibilidad de un archivo externo) necesitan ser manejadas. – Gullbyrd
¿Qué sucede si se trata de una vista parcial compartida y no hay controlador para ella? –
@MaksimVi .: Entonces deberías usar una acción infantil en su lugar. – SLaks
Yo diría que sí. La ruta óptima sería hacer pasar el Modelo a la Vista validado por el controlador antes de que llegue a la vista.
Bueno, su uso depende de los detalles de su aplicación, sin embargo, debe tratar de mantener sus puntos de vista lo más simple posible. Idealmente, la validez del código se verificaría en el controlador y nunca se pasaría a la vista.
No coloque dicho código en Vistas. Las vistas deben ser solo para su marcado de visualización tanto como sea posible. Puede poner esa captura de prueba en su método de acción de controlador que suministra los datos a una vista.
public ActionResult GetUser(int id)
{
try
{
//Get the ViewModel and return the correct View.
}
catch(Exception ex)
{
//log the error
return View("YourErrorView");
}
}
Tenga en cuenta que una de las cosas que MVC enfatiza es la separación de las preocupaciones. Las vistas deben ser limpias y legibles.
No es algo bueno que hacer. El marco MVC está diseñado para separar la vista con la lógica. Así que mantén la lógica donde debería estar, en el controlador.
@{
try
{
<td>
@((TradeType)Enum.Parse(typeof(TradeType), item.AppCode)).GetDescription();
</td>
}
catch
{
<td>@item.AppCode
</td>
}
}
Realmente no es una respuesta a la pregunta: la pregunta era si era una buena práctica, no cómo se hace. – Stephen
Si bien esto puede responder la pregunta, no dejaste ninguna explicación sobre por qué esto funciona. Esta respuesta no agrega mucho valor para los visitantes posteriores que puedan tener el mismo problema. Por favor expanda su respuesta para incluir alguna explicación. –
- 1. es @unlink una mala práctica?
- 2. Está usando una mala práctica "fuera de servicio"
- 3. ¿Está utilizando "NO EXISTE" una mala práctica de SQL?
- 4. Intentando atrapar el oncreate de un formulario
- 5. Java: ¿es una mala práctica intentar/atrapar dentro de un try/catch?
- 6. ¿Está utilizando etiquetas en mala práctica de JavaScript?
- 7. ¿Está utilizando miembros de matriz flexibles en C mala práctica?
- 8. está usando el acceso directo $() en jQuery mala práctica?
- 9. ¿La mala práctica de "arrojar excepciones" es?
- 10. ¿Está usando char como bool en C mala práctica?
- 11. ¿Es una mala práctica usar muchos viewmodels en asp.net mvc
- 12. ¿Es una mala práctica tener estado en una clase estática?
- 13. ¿Los argumentos NULL son una mala práctica?
- 14. ¿Es una mala práctica escribir a $ _POST?
- 15. ¿Mala práctica en este tutorial de primavera?
- 16. ¿Se consideran iframes 'mala práctica'?
- 17. Interfaz sin miembros: ¿mala práctica?
- 18. ¿La palabra clave "con" Delphi es una mala práctica?
- 19. ¿Está utilizando una instancia de una clase para acceder a métodos estáticos considerados como mala práctica?
- 20. ¿Se está utilizando una mala práctica "básica" aunque podría ser buena para la legibilidad?
- 21. ¿Está utilizando las etiquetas en las subrutinas de Perl como una mala práctica?
- 22. ¿Es una mala práctica devolver vistas parciales que contengan javascript?
- 23. ¿Es una mala práctica escribir manipuladores de eventos en línea
- 24. ¿Está Try-catch en JavaScript ignorando una mala práctica esperada de errores ocasionales?
- 25. ¿Está utilizando el almacenamiento en búfer de salida como una mala práctica?
- 26. Intentando comprender la jerarquía de vista
- 27. Usando métodos setter en constructor: ¿mala práctica?
- 28. C# lock en la referencia pasada al método - ¿mala práctica?
- 29. ASP.NET MVC - TempData - Buena o mala práctica
- 30. ¿El uso de procedimientos almacenados es una mala práctica?
¿Para qué? – SLaks
@SLaks - Como dijiste, no hay una buena razón para esto y habría lógica en el lugar equivocado, no lo he hecho aún, pero solo quería avanzar y retroceder un poco. La razón es que me di cuenta de que tenía una excepción en la vista al asociar un objeto que tenía un valor externo válido en un punto, pero ese objeto extraño se había eliminado de la base de datos. Aquí hay un ejemplo de una asociación: 'phase.Container = containers.Where (cont => cont.ContainerId == phase.ContainerId) .SingleOrDefault();'. Tendré que manejar las excepciones aquí. ¿Debería todo linq estar rodeado de try catch? –