2013-01-04 4 views
3

Comment y parvenir? Cette vue est générée automatiquement. Lorsque j'ajoute manuellement une vue par exemple: Contact vue avec le fichier Index.cshtml dedans.MVC 4: Créer un contrôleur pour l'affichage partagé _Layout.cshtml

Je peux modifier cette vue en écrivant un contact de contrôleur.

public class ContactController : Controller 
{ 
    public ActionResult Index() 
    { 
     @ViewBag.Test = "this text will be used in my Contact View"; 

     return View(); 
    } 
} 

donc à mon avis de contact que je peux faire comme ce

<p> @Viewbag.Test </p> 

et sera affiché le texte. Mais comment y arrivez-vous pour mon fichier _Layout.cshtml dans ma vue partagée? J'ai essayé la même chose en ajoutant un SharedController mais sans travailler de cette façon

Répondre

2

Vous ne pouvez pas avoir de contrôleur pour _Layout.cshtml. Ce fichier est utilisé pour la disposition de n'importe quelle vue. Par exemple, regardez le fichier _ViewStart.cshtml dans votre dossier Vues:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Cela dit essentiellement tous les contrôleurs d'utiliser cette disposition comme une enveloppe autour de la vue retournée par vos actions de contrôleur.

Votre fichier _Layout.cshtml a déjà un indice sur une façon de le remplir avec des valeurs:

<head> 
    ... 
    <title>@ViewBag.Title</title> 
    ... 
</head> 

Si vous effectuez les opérations suivantes dans une vue, il sera rendu dans la tête/section de titre de la _Layout.cshtml file:

@{ 
    @ViewBag.Title = "Home"; 
} 
+0

Je pense que vous n'avez pas lu la question. L'OP veut savoir comment accéder au 'ViewBag' du fichier' _Layout.cshtml' – musefan

1

Vous n'avez pas besoin d'un contrôleur pour _Layout. Votre vue de contact est ajoutée à _Layout pour créer une vue complète. Vous pouvez donc utiliser n'importe laquelle de vos propriétés ViewBag à partir de votre contrôleur de contacts à l'intérieur de _Layout. _Layout a accès aux mêmes variables que votre vue de contact.

Plus précisément, dans votre exemple:

public class ContactController : Controller 
{ 
    public ActionResult Index() 
    { 
     @ViewBag.Test = "this text will be used in my Contact View"; 

     return View(); 
    } 
} 

ViewBag.Test sera également accessible en _Layout de la même façon, il est à votre avis de contact.

Questions connexes