2013-02-27 5 views
3

travaille avec ASP.NET MVC et pendant quelques années et jamais vu celui-ci avant ...ASP.NET MVC4 ne rendant pas mises en page dans IIS

Je viens de recevoir une nouvelle machine. Créé un nouveau projet Web MVC4 (pour Internet, dans l'assistant). J'utilise le projet "out of the box" pour tester que tout est configuré et configuré correctement.

Si je l'exécute à partir de Visual Studio (2010) à l'aide du serveur Web intégré, tout va bien. Cependant, j'ai mis en place une application dans IIS et il ne rend pas la mise en page (code généré par défaut dans l'emplacement par défaut à ~/Views/Shared/_Layout.cshtml) mais j'obtiens le Index.cshtml (~/Views/Home/Index. cshtml) contenu. Rien de la mise en page n'est rendu: pas de tag html, pas de styles, pas de javascript, pas de balise body, rien.

Le diagnostic de base ... Aucune erreur de serveur n'apparaissant dans IIS. Rien consigné comme une erreur dans le journal des événements/applications. Rien n'apparaissant dans l'outil Inspecteur de réseau Chrome (pas même 404 ou 500).

Des idées? Je suis perplexe ... avoir le sentiment que c'est quelque chose de très, très simple.

Index.cshtml (par défaut le code généré à l'exception de mon code de test en bas, juste pour vous assurer que les dll MVC ont été pris correctement):

<h3>We suggest the following:</h3> 
<ol class="round"> 
    <li class="one"> 
     <h5>Getting Started</h5> 
     ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that 
     enables a clean separation of concerns and that gives you full control over markup 
     for enjoyable, agile development. ASP.NET MVC includes many features that enable 
     fast, TDD-friendly development for creating sophisticated applications that use 
     the latest web standards. 
     <a href="http://go.microsoft.com/fwlink/?LinkId=245151">Learn more…</a> 
    </li> 

    <li class="two"> 
     <h5>Add NuGet packages and jump-start your coding</h5> 
     NuGet makes it easy to install and update free libraries and tools. 
     <a href="http://go.microsoft.com/fwlink/?LinkId=245153">Learn more…</a> 
    </li> 

    <li class="three"> 
     <h5>Find Web Hosting</h5> 
     You can easily find a web hosting company that offers the right mix of features 
     and price for your applications. 
     <a href="http://go.microsoft.com/fwlink/?LinkId=245157">Learn more…</a> 
    </li> 
</ol> 

@foreach(var i in new int[]{1,2,3,4,5}) 
{ 
    <div>Test @i.ToString()</div> 
} 

Rendered in Chrome:

<h3>We suggest the following:</h3> 
<ol class="round"> 
    <li class="one"> 
     <h5>Getting Started</h5> 
     ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that 
     enables a clean separation of concerns and that gives you full control over markup 
     for enjoyable, agile development. ASP.NET MVC includes many features that enable 
     fast, TDD-friendly development for creating sophisticated applications that use 
     the latest web standards. 
     <a href="http://go.microsoft.com/fwlink/?LinkId=245151">Learn more…</a> 
    </li> 

    <li class="two"> 
     <h5>Add NuGet packages and jump-start your coding</h5> 
     NuGet makes it easy to install and update free libraries and tools. 
     <a href="http://go.microsoft.com/fwlink/?LinkId=245153">Learn more…</a> 
    </li> 

    <li class="three"> 
     <h5>Find Web Hosting</h5> 
     You can easily find a web hosting company that offers the right mix of features 
     and price for your applications. 
     <a href="http://go.microsoft.com/fwlink/?LinkId=245157">Learn more…</a> 
    </li> 
</ol> 

    <div>Test 1</div> 
    <div>Test 2</div> 
    <div>Test 3</div> 
    <div>Test 4</div> 
    <div>Test 5</div> 
+1

Il s'agit peut-être d'un problème d'autorisation, lorsque l'IIS utilisateur utilise pour exécuter votre pool d'applications n'a pas accès à ce fichier. –

+0

Je vais jeter un coup d'oeil à ceci et rendre compte. – longda

+0

Oui, juste vérifié et les autorisations semblent être correctes. – longda

Répondre

6

Alors, voici la solution finale (pend la tête dans la honte):

D'abord, IIS ouvert, cliquez sur le site Web , ouvrez les paramètres d'authentification sous le groupe IIS, cliquez sur Authentification anonyme et cliquez sur "Modifier" dans le panneau Actions de droite. Notez ici comment l'authentification anonyme est en cours d'exécution. Il peut s'agir d'un utilisateur spécifique ou du répertoire du pool d'applications. De toute façon, vous devrez vous assurer que ce compte dispose des autorisations appropriées dans la boîte de dialogue de sécurité du répertoire à partir duquel vous servez votre site. Dans mon cas (et le cas par défaut, je crois que c'était une toute nouvelle boîte), il sera défini à l'utilisateur spécifique: IUSR. Comme mentionné, donnez à cet utilisateur les bonnes permissions pour lire/exécuter les fichiers et vous devriez être prêt à partir. Ce qui m'a indiqué que j'essayais de charger des fichiers statiques sur le site tels que css ou images et que je recevais des 404 ou des redirections pour me connecter à ces fichiers (j'essayais quelques solutions différentes concernant les comptes et autorisations).

Références:

+0

alors comment pouvons-nous le réparer dans iis express? – Blaise

1

La mise en page ne correspond pas à ~\Views\_ViewStart.cshtml.

En règle générale son contenu doit ressembler à ceci ...

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

Yup c'est ce qu'il a. C'est celui par défaut qui est généré lorsque vous créez un nouveau projet. Il fonctionne aussi bien à l'intérieur du serveur web dev de studio visuel (casini je pense que ça s'appelle). Lorsque j'essaie de le charger via IIS (j'ai configuré un site Web pour héberger les fichiers dev) est l'endroit où la déconnexion semble être. – longda

+0

Quand vous dites IIS, voulez-vous dire le service IIS ou IIS Express? (même si cela devrait fonctionner aussi bien pour l'un ou l'autre ...). Et je suppose que votre contrôleur retourne une vue? 'return View();' et pas un partiel? 'return PartialView()' –

+0

Salut, par IIS je veux dire la norme, installation complète de IIS, pas la version express. Je tape habituellement inetmgr sur la ligne de commande et l'application apparaît. Double vérifié le contrôleur et il est en effet retournant une vue(). Fonctionne parfaitement dans le serveur Web de développement cuit dans Visual Studio, donc je suppose qu'il s'agit d'une sorte de configuration twiddling. – longda

1

D'autres questions possibles peuvent être:

  1. Build Action est incorrect sur le fichier _layout.cshtml (assurez-vous il est défini sur "Contenu" afin qu'il soit inclus dans le webdeploy paquet).

  2. L'action de construction n'est pas correcte sur le fichier _ViewStart.cshtml (assurez-vous qu'il est défini sur "Contenu" afin qu'il soit inclus dans le package webdeploy). Assurez-vous que les deux fichiers sont inclus dans votre projet (je sais que cela semble idiot, et c'est le cas, mais cela m'est réellement arrivé).

Questions connexes