web-dev-qa-db-fra.com

ASP.Net MVC - Erreur de ressource introuvable

Je suis complètement nouveau sur ASP.Net MVC. Je viens de créer un projet MVC3 dans Visual Studio 2010. Le moteur de vue est rasoir. Lorsque je viens d'exécuter l'application, le résultat est correct dans le navigateur. L'URL est http: // localhost: 4163 / . Ensuite, j'ai appliqué "Définir comme page de démarrage" à Index.cshtml dans le dossier ~\Views\Home. Ensuite, lorsque j'ai exécuté l'application, l'URL est devenue http: // localhost: 4148/Views/Home/Index.cshtml et il a été indiqué que la ressource était introuvable. Que dois-je faire pour le corriger? Où se fait le mappage d'URL?

Fichier Global.asax:

using System.Web.Mvc;
using System.Web.Routing;

namespace TEST
{

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
    }
 }
60
Lijo

Le mappage ou "routage" des URL est géré par Global.asax à la racine de votre site ASP.NET MVC.

Lorsque vous cliquez sur "Définir comme page de démarrage", les paramètres du projet sont modifiés pour rechercher ce fichier par rapport à la racine de l'application. Mais dans MVC, la route par défaut vers votre page d'index est en fait http://localhost:4163/Home/Index - lisez quelque chose comme this pour avoir une idée du fonctionnement du routage.

Pour "réparer" votre projet maintenant qu'il essaie (et échoue) de naviguer directement dans la vue, faites un clic droit sur le projet et choisissez "Properties", cliquez sur l'onglet "Web" et choisissez " Specific Page ", en laissant la zone de texte vide. Désormais, lorsque vous commencez à déboguer, vous devez revenir à la page d'accueil. Consultez les paramètres de route par défaut pour savoir pourquoi dans la méthode RegisterRoutes de Global.asax.

93
greg84

Assurez-vous que vous avez créé une classe HomeController.cs dans le dossier de votre contrôleur.

24
Naren Chejara

Dans un problème similaire que j'ai rencontré, mon action avait un attribut HTTP "POST", mais j'essayais d'ouvrir la page (par défaut, c'est "GET").

J'ai donc dû créer une version HTTP "GET".

10
sajad

Moi aussi j'ai eu la même erreur html-404:

La ressource est introuvable. Description: HTTP 404. La ressource que vous recherchez (ou l'une de ses dépendances) a peut-être été supprimée, si son nom a été modifié ou est temporairement indisponible. Veuillez réviser l'URL suivante et assurez-vous qu'elle est orthographiée correctement.

Mais après un examen attentif, j’ai trouvé que j’avais laissé le nom du contrôleur en tant que Default1Controller au lieu de le changer en HomeController. Quand j'ai fait le changement et débogué l'application, cela a fonctionné. J'espère que cela vous aidera si vous avez le même problème.

6
Priyabrata biswal

Suivez les étapes ci-dessous pour exécuter votre application asp.net mvc.

  • Création de contrôleur
    Faites un clic droit sur le dossier des contrôleurs et ajoutez un contrôleur. Remarque - ne supprimez pas le postfix du contrôleur. Ses conventions ASP.NET MVC.
    Nommez le contrôleur en tant que "DemoController" et vous pouvez voir que l'action "Index" est présente dans "DemoController". "Index" est l'action par défaut présente lors de la création d'un contrôleur.

  • Création de vue
    Cliquez avec le bouton droit de la souris sur le nom de l'action "Index" et conservez le nom de la vue par défaut, "Index", puis cliquez sur le bouton "Ajouter".

  • Réglage de l'itinéraire
    Ouvrez le fichier Global.asax. Le réglage par défaut de route est alors mappé sur le contrôleur "Accueil" et l'action "Index" changez-le en contrôleur "Démo" et action "Index". Le mappage d'URL est écrit dans le fichier Global.asax. Lorsque vous ouvrez le fichier Global.asax, vous verrez le réglage ci-dessous:

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    

    Changez-le en:

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    

Et lancez votre application, vous pouvez voir que votre application fonctionne.

5
Neo

Incroyablement, j'avais accidentellement supprimé le mot clé public du contrôleur!

enter image description here

J'imagine que cela n'aidera personne d'autre, mais on ne sait jamais ...

5
Andy Brown

Eh bien, vous ne pouvez pas définir la page par défaut dans asp.net mvc.
Allez à global.asax.cs et consultez la définition du routage. L'itinéraire par défaut pointe vers la méthode Index HomeController.
Vous ferez mieux de visionner quelques courts métrages sur asp.net mvc ou d’essayer de trouver tutorial nerd dinner , ce qui vous familiarisera assez rapidement avec le cadre.

Je pense que les meilleures réponses sur les tutoriels ont déjà été fournies pour répondre à cette question:

Tutoriels rapides sur ASP.NET MVC

4
Eugeniu Torica

J'avais un problème similaire il y a quelque temps lorsque j'utilisais VS 2012. Résolu en reconstruisant simplement l'application en cliquant sur Construire> Reconstruire.

2
FatGit

Dans asp.net mvc, vous ne pouvez pas utiliser l'option "Définir comme page de démarrage", car les vues MVC ne sont pas indépendantes, comme les pages de formulaires Web. Ce ne sont que des fichiers modèles pour l'affichage de votre modèle. Ils n'ont pas de module de traitement http. Toutes les demandes Web doivent passer par les actions du contrôleur, vous ne pouvez pas demander des vues directement.

2
Evgeny Levin

Ajoutez simplement celui-ci ici. Si des problèmes surviennent lorsque la page d’index du Home Controller ne se charge plus, c’est peut-être parce que vous n’avez pas encore configuré votre Projet de démarrage. Cliquez avec le bouton droit de la souris sur le projet sur lequel vous souhaitez démarrer votre application et définissez-la comme projet de démarrage. Vous devriez pouvoir continuer.

1
Jeff Moretti

Si vous utilisez IIS Express. Il se peut que vous ayez ouvert un autre projet utilisant le même répertoire virtuel. Lorsque vous avez ouvert la 2e solution, VS remappe ce répertoire IIS En conséquence, cela ne fonctionnera pas avec des problèmes différents.

Pour résoudre ce problème: Fermez toutes les instances de VS Studio. Ouvrez VS avec le projet que vous travaillez et reconstruisez.

1
user1325696

(MVC 5): Changer RouteConfig.cs pour inclure deux routes comme ceci:

            routes.MapRoute(
            name: "DefaultWithLanguage",
            url: "{language}/{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
            constraints: new {language= "[a-z]{2}"}
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

ainsi, lorsque la partie linguistique de la route n'est pas spécifiée, les noms de contrôleur qui ne correspondent pas à regex "[a-z]{2}" et remplace la langue par défaut et redirige vers le reste de la route ...

1
ALIRA

Si vous avez essayé toutes les solutions ci-dessus et que le problème persiste, utilisez cette solution simple. Ouvrez le débogueur Facebook à partir de ce lien , tapez l'URL de la page et cliquez sur le bouton Extraire les nouvelles informations sur le scrap. Cela résoudra votre problème.

La raison derrière (ce que je pense) est que facebook api enregistre l'état actuel de la page et montre même de son propre serveur. Si vous cliquez sur le bouton Partager pendant le codage et que votre page n'est pas téléchargée, l'API facebook ne peut pas trouver cette page sur le serveur et enregistre l'état de la page sous le nom "ressource introuvable". Maintenant, il continuera à afficher le même message même après avoir téléchargé la page. Lorsque vous récupérez une page à partir du débogueur de Facebook, il résout tout à partir de zéro et enregistre l’état actuel de la page. Votre bouton de partage commence alors à fonctionner sans modification du code.

0

J'avais un contrôleur nommé usersController. J'ai donc essayé de créer la page de démarrage en modifiant le contrôleur par défaut de Home en usersController, comme indiqué ci-dessous.

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "usersController", action = "Index", id = UrlParameter.Optional }
        );
    }

La solution consistait à modifier la valeur par défaut du contrôleur en utilisateurs plutôt qu'en utilisateurs.

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
        );
    }
0
Salman Saleh

dans la barre d'adresse de l'entrée du navigateur, procédez comme suit: ControllerName/ActionMethod n'est pas entré ControllerName/ViewName, par exemple, dans la barre d'adresse: http: // localhost: 55029/test2/getview code de fichier cshtml:

@{
Layout = null; 
}

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head>
<body>
<div>            
</div>
</body>
</html>

et code de fichier cs:

public ActionResult GetView()
{
return View("MyView");
}
0
zokaee hamid

Pour moi, le problème a été causé par un problème d'espace de noms.

J'avais mis à jour mon espace de noms de projet dans mes classes de projet Web de MyProject à MyProject.Web, mais j'avais oublié de mettre à jour les propriétés du projet >> Espace de noms par défaut. Par conséquent, lorsque j'ai ajouté un nouveau contrôleur, il utilisait l'ancien espace de noms. Tout ce que je devais faire était de corriger l’espace de noms dans le nouveau contrôleur et cela fonctionnait.

0
jmdon

la page de démarrage du projet asp.net mvc est "Page actuelle" par défaut. Ouvrez simplement un fichier côté serveur et démarrez le projet. de cette façon mvc ouvrir le contrôleur par défaut qui est homecontroller pour votre projet

0
Yorgo

Solution simple utilisant HomeController.cs:

Ouvrez le fichier HomeController.cs sous le dossier Controllers. Ajoutez le code:

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

Maintenant, si vous utilisez un autre contrôleur (pas HomeController):

Pour voir votre vue comme ceci:

http://localhost:1234/xyz/MyView

Dans le fichier xyzController.cs, sous le dossier Contrôleurs,

assurez-vous d’ajouter une méthode ActionResult comme ceci:

public ActionResult MyView()
{
    return View(myView); //pass in your view if you want.
}

J'ai également reçu ce message alors que je ne faisais pas correctement référence au nom de mon modèle:

@using (Html.BeginForm ("MyView", "MyModel", FormMethod.Get))

0
live-love

J'ai eu le même genre de problème, sauf que je n'utilisais pas le nom Index.cshtml pour mon View, je l’ai fait par exemple LandingPage.cshtml, mon problème était que le ActionResult de mon contrôleur n’était pas le même nom que mon nom de vue (dans ce cas, mon ActionResult s’appelait Index ()) - C’est une erreur évidente de ma part. , mais je suis nouveau chez MVC, je vais donc échouer avec les bases ici et là.

Donc dans mon cas, je devais changer mon ActionResult pour qu'il porte le même nom que mon View: LandingPage.cshtml

    public ActionResult LandingPage()
    {
        ProjectDetailsViewModels PD = new ProjectDetailsViewModels();
        List<ProjectDetail> PDList = new List<ProjectDetail>();

        PDList = GetProductList();
        PD.Projectmodel = PDList;


        return View(PD);
    }

Je suis nouveau à MVC, alors peut-être que cela aidera quelqu'un d'autre qui est nouveau et qui a des difficultés avec la même chose que moi.

0
AxleWack

Vous pouvez modifier la page de démarrage dans les propriétés de votre projet (projet -> propriétés du projet). Sous l'onglet Web, vous pouvez sélectionner specify page et changez votre page de démarrage en home/ ou home/index. Cela vous dirigera vers la page appropriée en fonction de vos itinéraires. L'adresse de http: // localhost: 4148/Views/Home/Index.cshtml ne fonctionne pas spécifiquement car elle est gérée en fonction de vos itinéraires, ce qui indique que l'URL doit être http: // localhost: 4148 / {contrôleur}/{action} et un/{id} facultatif.

Si vous voulez en savoir plus sur le routage, jetez un oeil ici.

0
James Santiago