2011-03-04 28 views
5

¿Existe alguna manera de utilizar una funcionalidad similar a la llamada Global Variables en el motor Spark View, pero para Razor.Variables globales en el motor Razor View

El punto de todo es lis para poder definir una variable en una sección para el título y luego ser capaz de establecer o cambiar el valor de esa variable más adelante en otra sección.

En chispa debe crear la variable en una sección algo así como esto (código incompleto fines de ejemplo):

<html> 
    <head> 
    <global type='string' Title='"Site Name"'/> 
    <title>${Title}</title> 
    </head> 
    <body> 
    <div><use content="view"/></div> 
    </body> 
</html> 

Y entonces se podría establecer en un punto de vista diferente o sección o lo que sea:

<set Title='product.Name + " - " + Title'/> 

¿Cómo haré para hacer algo como esto en Razor o simplemente resolver un problema similar si tengo un enfoque incorrecto?

Respuesta

7

Usted podría utilizar ViewBag.Title dentro del diseño:

<html> 
    <head> 
    <title>@ViewBag.Title - Site Name</title> 
    </head> 
    <body> 
    <div> 
     @RenderBody() 
    </div> 
    </body> 
</html> 

y luego definir esta variable dentro de la vista:

@model AppName.Models.Product 
@{ 
    ViewBag.Title = Model.Name; 
} 

ACTUALIZACIÓN:

Tras el comentarios pregunta sobre valores predeterminados puede usar secciones.

<html> 
    <head> 
    <title> 
    @if (IsSectionDefined("Title")) 
    { 
     RenderSection("Title") 
    } 
    else 
    { 
     <text>Some default title</text> 
    } 
    </title> 
    </head> 
    <body> 
    <div> 
     @RenderBody() 
    </div> 
    </body> 
</html> 

y luego dentro de la vista que podría redefinir la sección si se quiere:

@section Title { 
    <text>some redefined title here</text> 
} 
+0

que parece trabajo, pero parece que si fijo el valor del título en el diseño (como si quiero tener uno por defecto) y luego "cambiarlo" en la vista, mantiene el primer valor establecido. Ahora bien, si no lo configuro en el diseño, toma el valor establecido en la vista. ¿Alguna idea de cómo solucionar esto? ¡Gracias! – bluediapente

+0

@ Lilitu88, consulte mi actualización sobre los métodos 'IsSectionDefined' y' RenderSection'. –

+2

Las secciones no son necesarias en este caso. Simplemente podría tener la siguiente expresión en su vista '@ (ViewBag.Title ??" Default Title ")' – marcind