Si se fijan, no estoy mostrando el mensaje de error en la vista `Detail.cshtml` perteneciente al controlador de JobOpportunity, sino que estoy mostrandolo en `_Layout.cshtml`. Por qué?

Sencillo, porque de esta forma voy a poder pasarle un mensaje de error a ViewBag cuando quiera, y el layout va a ser lo suficientemente inteligente para: 

1. Solo mostrarme un error cuando desde un controlador yo llene `ErrorMessage` con algo. 
2. Mostrarme el error siempre en el mismo sitio. Dandole consistencia adonde el usuario estima que los errores le van a aparecer.

Ojo: Cuidado abusando del ViewBag. En el 95% del tiempo todo lo que tu vista necesita debe estar dentro del modelo. Este es un caso excepcional de una variable que vamos a usar a través de toda la aplicación. 

Lee sobre como funciona dynamic. El código no sabe cual es el tipo de datos al que está bindeada la variable hasta que la aplicación está corriendo. Check for nulls and ensure that you're using the correct data type!