8
votes

L'opinion 'index' ou son maître n'a pas été trouvé

Je suis nouveau au type de projet C # MVC et lorsque j'ai créé un projet Vide C # MVC, j'ai remarqué l'erreur suivante:

 public ActionResult Index()
        {
            return View();
        }


1 commentaires

Assurez-vous que le fichier existe sur le disque et non à la carte de fichier de Visual Studio. Cela pourrait arriver si vous utilisez le contrôle de la source et d'autres commettre le CSPROJ mais le CSHTML.


9 Réponses :


28
votes

MVC recherche des vues (comme index) dans le dossier Views, mais ils doivent également être sous un dossier nommé d'après leur contrôleur (à quelques exceptions près comme partiels).

C'est donc la structure que vous souhaitez suivre Votre projet P>

Controllers (folder)
    HomeController (.cs)
    AccountController (.cs)

Views (folder)
    Home (folder)
        Index (.cshtml)
    Account (folder)
        Index (.cshtml)


0 commentaires

5
votes

Le moteur MVC recherche d'une vue sous Shared ou sous le dossier nommé comme le préfixe de votre classe de contrôleur. Donc, si vous avez abccontroller Vous devez avoir votre index.cshtml dans le dossier vues / abc .

PS: Dans votre exemple, vous disposez d'un suffixe à votre nom de contrôleur ( Controlername ), je ne pense pas que ce soit une bonne pratique, nommez toujours vos contrôleurs [nom] Controller < / code>


0 commentaires

2
votes

Lorsqu'une vue est renvoyée, il s'attend à ce qu'un fichier associé .cshtml est dans la même structure de dossier de visualisation que la mise en page du contrôleur pour cette zone (si aucune zone n'est utilisée, il n'y a que 1 Voir le dossier et 1 dossier du contrôleur). Le nom du contrôleur sera le nom du dossier dans le dossier Vues et le nom d'actionResult sera le nom prévu du fichier .CSHTML.

Heureusement, il est facile de remédier à la situation où le fichier de vue manque. Faites un clic droit sur index pour votre résultat d'action, puis sélectionnez Ajouter une vue. Cliquez sur Ok, et il créera index.cshtml pour vous à l'intérieur du bon dossier. Maintenant, lorsque vous exécutez le projet et accédez à index , c'est ce que vous verrez.


0 commentaires

2
votes

Si vous avez déployé manuellement le code dans une instance d'IIS, assurez-vous que l'identité de la piscine d'application utilisée pour cette application dans IIS a des droits aux dossiers de l'application.

Un bon moyen de diagnostiquer si c'est quelque chose qui ne va pas avec votre code ou quelque chose de mal avec vos paramètres IIS consiste à l'exécuter dans le débogueur VS 201X. Si cela fonctionne là-bas, mais ne fonctionnera pas directement sous IIS, c'est une bonne chance que la sécurité de l'identité de la piscine des applications soit heurtée.


1 commentaires

C'était la question que j'avais, merci. J'ai mis à jour l'identité de la pool app pour utiliser le même utilisateur que mon site Web et maintenant cela fonctionne.



1
votes

Vous pouvez avoir des assemblages d'OLD / Bad ASP.NET dans votre construction.

Si vous avez fabriqué sûr vous avez votre contrôleur, votre espace de noms et votre nom de nom à la bonne place, il y a de bonnes chances que votre assemblage MVC / ASP a des problèmes de travail avec l'environnement mono actuel.

Si vous avez essayé les astuces de copier tous les assemblages .NET, vous pouvez les trouver et les marquer dans votre bac, il y a une bonne chance mono ou sa configuration ne fait pas fusionner correctement - et vous n'avez plus besoin de le faire. . J'ai eu ce problème lors de la mise à jour d'une machine sur la dernière construction mono. J'ai essuyé ces assemblées de ma corbeille et Nuget'ed les derniers assemblages du dossier Packages MVC Mono MVC.

première chose que vous verrez est:

  • microsoft.aspnet.mvc
  • microsoft.aspnet.infrastructure
  • Microsoft.aspnet.WebPages
  • microsoft.aspnet.razor

    Cela résoudra ces problèmes.


0 commentaires

21
votes

J'ai eu ce problème quelques fois auparavant et cela peut être l'une des autres réponses, mais cela peut également être l'action de construction qui cause la question.

Si vous cliquez avec le bouton droit de la souris sur le fichier .cshtml / .vbhtml que vous avez un problème avec, sélectionnez Propriétés et dans la fenêtre Propriétés, définissez l'action de construction sur Contenu , alors cela peut être une solution à votre problème.


0 commentaires

1
votes

J'ai eu un répertoire virtuel qui ne faisait pas référence correctement au répertoire réel. (Sous Windows) J'ai corrigé cela en entrant dans IIS (Internet Information Services Manager) et en cliquant avec le bouton droit de la souris sur le répertoire virtuel qui n'a pas été correctement référencé (dans votre cas, vues ). Les répertoires virtuels auront cette petite icône à côté d'eux:

 Entrez la description de l'image ici

Cliquez avec le bouton droit de la souris, puis sélectionnez Gérer le répertoire virtuel > Paramètres avancés . Assurez-vous que le chemin physique correspond à l'endroit où vous pensez aller:

 Entrez la description de l'image ici

Cela ne va pas s'appliquer à tous les cas, mais c'est un match possible pour certains cas.


0 commentaires

1
votes

Je sais que c'est un ancien poste, mais j'ai couru dans cette même situation en cours d'exécution sur Ubuuntu 16.04 et mono 4.2.1 et rien de tout cela n'a contribué. J'ai commencé à creuser dans d'autres choses et, après une semaine, j'ai découvert que pour une raison quelconque Microsoft.Web.WebPages.Oauth.dll causait cette erreur. Après avoir supprimé cette DLL et supprimer toutes les réfrérences (je n'utilise pas l'autorité d'ouverture de toute façon), tout a commencé immédiatement à travailler même en utilisant une appartenance simple avec MySQL. Je voulais donc publier ceci ici au cas où quelqu'un d'autre circule dans cette même situation sur Mono et Linux, car cela se présente dans Google.


0 commentaires

0
votes

Une étape de diagnostic utile consiste à cliquer avec le bouton droit de l'intérieur de l'action du contrôleur, choisissez "Aller à la vue".

Si Visual Studio peut trouver la vue, il est probablement dans le bon dossier, alors vérifiez donc votre URL. Par exemple, si vous utilisez une zone, le nom de la zone doit être dans l'URL: P>

/Area/Controller/Action


0 commentaires