web-dev-qa-db-fra.com

Vue rasoir sans mise en page

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>
66
user156888

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é.

10
DMulligan

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.

120
Jean-Baptiste HENRY

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.

34
SLaks

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;

17
saviiles

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).

16
Erik Philips

Utilisation:

@{
    Layout = null;
 }

se débarrasser de la mise en page spécifiée dans _ViewStart.

9
Soroush

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.

3
Souhaib Lamine

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";
}
2
Anand Gaikwad

Créez simplement la vue en tant que vue partielle de sorte qu'aucun fichier de disposition ne soit utilisé.

1
nsdiv