95 votes

Razor View sans mise en page

Comment se fait-il que lorsque j'ai Layout = null; à mon avis, la mise en page par défaut s'affiche toujours !

Y a-t-il une astuce pour l'empêcher de faire ça ?

Voici ma vue sans mise en page :

@{
    Layout = "";
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
    @{Html.RenderAction("Head", "Header");}
</head>
<body>
    <div>
        Home
    </div>
</body>
</html>

Voici la sortie rendue !

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="stackoverflow.com/Content/Site.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
</head>

<body>
    header
</body>
</html>
</head>
<body>
    <div>
        Home
    </div>
</body>
</html>

188voto

Je pense que cela :

@{
    Layout = "";
 }

n'est pas le même que celui-là :

@{
    Layout = null;
 }

J'utilise la seconde et ça marche, sans _Viewstart.

37voto

SLaks Points 391154

Vous (et KMulligan) avez mal compris. _ViewStart pages.

_ViewStart sera toujours exécute, avant que votre page ne démarre.
Il est destiné à être utilisé pour initialiser les propriétés (comme les Layout ) ; il ne doit généralement pas contenir de balises. (Puisqu'il n'y a aucun moyen de le contourner).

Le modèle correct consiste à créer une page de mise en page séparée qui appelle RenderBody et définir le Layout pour pointer vers cette page dans _ViewStart .

Vous pouvez alors modifier Layout dans vos pages de contenu, et les changements prendront effet.

26voto

saviiles Points 511

Je pense qu'il est préférable de travailler avec des "vues" individuelles, j'essaie de passer de PHP à MVC4, c'est vraiment difficile mais je suis sur la bonne voie...

Pour répondre à votre question, si vous travaillez sur des pages individuelles, il suffit de modifier le fichier _ViewStart.cshtml.

@{
  Layout = null;
}

Un autre conseil si vous rencontrez des problèmes avec le chemin CSS...

Mettez "../" avant l'url.

Ce sont les 2 problèmes que je rencontre aujourd'hui, et je les résous de cette façon !

Regards ;

22voto

Erik Philips Points 18156

Logique pour déterminer si une vue doit utiliser une mise en page ou non ne doit PAS se trouver dans l'interface de l'utilisateur. _viewStart ni le View . Définition d'une valeur par défaut dans _viewStart est bien, mais l'ajout d'une logique de mise en page dans la vue/le début de la vue empêche cette vue d'être utilisée ailleurs (avec ou sans mise en page).

Votre action de contrôleur devrait :

return PartialView()

En plaçant ce type de logique dans la vue, vous brisez la Principe de responsabilité unique règle en M (données), V (visuel), C (logique).

17voto

AFinkelstein Points 3291

Avez-vous un _ViewStart.cshtml dans ce répertoire ? J'ai eu le même problème que vous lorsque j'ai essayé d'utiliser _ViewStart. Puis je l'ai renommé _mydefaultview, je l'ai déplacé dans le répertoire Views/Shared et j'ai changé pour spécifier no view dans les fichiers cshtml où je ne le veux pas, et spécifier _mydefaultview pour le reste. Je ne sais pas pourquoi c'était nécessaire, mais ça a marché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X