Comment se fait-il quand j'ai Layout = null;
à mon avis - la présentation par défaut est-elle toujours active?!
Y a-t-il un truc 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="/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>
Avez-vous un _viewstart.cshtml dans ce répertoire? J'ai eu le même problème que vous rencontrez lorsque j'ai essayé d'utiliser _viewstart. Ensuite, je l'ai renommé _mydefaultview, je l'ai déplacé vers le répertoire views/shared et je suis passé à la spécification d'aucune vue dans les fichiers cshtml où je ne le voulais pas, et en spécifiant _mydefaultview pour le reste. Je ne sais pas pourquoi c'était nécessaire, mais ça a fonctionné.
Je pense que ce :
@{
Layout = "";
}
n'est pas la même chose que ça:
@{
Layout = null;
}
J'utilise le second et ça marche, pas de _Viewstart inclus.
Vous (et KMulligan) êtes mal compris _ViewStart
pages.
_ViewStart
va toujours exécuter avant le début de votre page.
Il est destiné à être utilisé pour initialiser des propriétés (telles que Layout
); il ne devrait généralement pas contenir de balisage. (Puisqu'il n'y a aucun moyen de le remplacer).
Le modèle correct consiste à créer une page de présentation distincte appelant RenderBody
et à définir la propriété Layout
pour qu'elle pointe vers cette page dans _ViewStart
.
Vous pouvez ensuite changer Layout
dans vos pages de contenu et les modifications entreront en vigueur.
Je pense que c'est mieux de travailler avec des "vues" individuelles, j'essaie de passer de PHP à MVC4, c'est vraiment difficile, mais je suis sur le bon chemin ...
Pour répondre à votre question, si vous travaillez avec des pages individuelles, modifiez simplement le fichier _ViewStart.cshtml.
@{
Layout = null;
}
Un autre conseil si vous rencontrez des problèmes avec le chemin CSS ...
Mettez "../" avant de l'URL
Ce sont les 2 problèmes que je rencontre aujourd'hui et que je résous de cette façon!
Cordialement;
La logique permettant de déterminer si une vue doit utiliser une présentation ou non ne devrait PAS figurer dans le _viewStart
ni le View
. Définir une valeur par défaut dans _viewStart
ça va, mais ajouter une logique de présentation dans la vue/viewstart empêche cette vue d'être utilisée ailleurs (avec ou sans mise en forme).
Votre action de contrôleur devrait:
return PartialView()
En mettant ce type de logique dans la vue, vous enfreignez la règle principe de responsabilité unique dans M (données), V (visuel), C (logique).
Utilisation:
@{
Layout = null;
}
se débarrasser de la mise en page spécifiée dans _ViewStart.
Je voulais afficher la page de connexion sans la mise en page, ce qui me convient très bien (il s’agit du fichier _ViewStart.cshtml). Vous devez définir le ViewBag.Title dans le contrôleur.
@{
if (! (ViewContext.ViewBag.Title == "Login"))
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
}
Je sais qu'il est un peu tard, mais j'espère que cela aidera un corps.
Procédure 1: Contrôlez le rendu des présentations à l'aide du fichier _ViewStart dans le répertoire racine du dossier Views
Cette méthode est le moyen le plus simple pour les débutants de contrôler le rendu des présentations dans votre application ASP.NET MVC. Nous pouvons identifier le contrôleur et rendre les Layouts comme contrôleur par. Pour ce faire, nous pouvons écrire notre code dans un fichier _ViewStart situé dans le répertoire racine du dossier Views. Voici un exemple montre comment cela peut être fait.
@{
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
string cLayout = "";
if (controller == "Webmaster") {
cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
}
else {
cLayout = "~/Views/Shared/_Layout.cshtml";
}
Layout = cLayout;
}
Procédure 2: Définir la mise en page en revenant de ActionResult
L’une des grandes caractéristiques d’ASP.NET MVC est qu’il est possible de remplacer le rendu de présentation par défaut en renvoyant la présentation à partir de ActionResult. C'est donc aussi un moyen de rendre différentes dispositions dans votre application ASP.NET MVC. Les exemples de code suivants montrent comment procéder.
public ActionResult Index()
{
SampleModel model = new SampleModel();
//Any Logic
return View("Index", "_WebmasterLayout", model);
}
Procédure 3: Lay-sage Layout (en définissant Layout dans chaque vue en haut)
ASP.NET MVC nous offre une telle fonctionnalité et une telle faxabilité pour remplacer le rendu de présentation par défaut en définissant la présentation sur la vue. Pour implémenter cela, nous pouvons écrire notre code de la manière suivante dans chaque vue.
@{
Layout = "~/Views/Shared/_WebmasterLayout.cshtml";
}
Procédure 4: Placer le fichier _ViewStart dans chacun des répertoires
C'est un moyen très utile de définir différentes dispositions pour chaque contrôleur de votre application ASP.NET MVC. Si nous voulons définir la disposition par défaut pour chaque répertoire, nous pouvons le faire en plaçant le fichier _ViewStart dans chacun des répertoires avec les informations de disposition requises, comme indiqué ci-dessous:
@{
Layout = "~/Views/Shared/_WebmasterLayout.cshtml";
}
Créez simplement la vue en tant que vue partielle de sorte qu'aucun fichier de disposition ne soit utilisé.