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);
}
}
}
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.
Assurez-vous que vous avez créé une classe HomeController.cs dans le dossier de votre contrôleur.
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".
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.
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.
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:
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.
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.
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.
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.
(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 ...
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.
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 }
);
}
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");
}
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.
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
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))
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.
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.