Je dois mettre en œuvre une fonctionnalité semblable à celle de SO sur mon site asp.net MVC.
Par exemple, lorsque l’utilisateur accède à https://stackoverflow.com/questions/xxxxxxxx
après le chargement, la ligne d’object est concaténée avec l’URL et devient l’URL https://stackoverflow.com/questions/xxxxxxxx/rails-sql-search-through-has-one-relationship
Au-dessus, la partie “/ rails-sql-search-through-has-one-one-relationship” est ajoutée à l’URL.
Dans les formulaires Web, c’est simple, je pourrais simplement utiliser la réécriture d’URL. Mais pas sûr de savoir comment accomplir cela dans MVC
La ligne suivante provient du fichier Global.asax
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults );
la chaîne que je dois concaténer se trouve dans ma firebase database, donc elle va chercher à partir de là. Comment puis-je accomplir cela?
Ceci s’appelle une route de limace. Un moyen d’y parvenir est de définir une route avec un paramètre optionnel slug
et de vérifier dans la méthode du contrôleur si le paramètre a été fourni.
routes.MapRoute( name: "Question", url: "Question/{id}/{slug}", defaults: new { controller = "Question", action = "Details", slug = UrlParameter.Optional } );
Puis dans QuestionController
(en supposant qu’un identifiant sera toujours fourni)
public ActionResult Details (int id, ssortingng slug) { if (ssortingng.IsNullOrEmpty(slug)) { // Look up the slug in the database based on the id, but for testing slug = "this-is-a-slug"; return RedirectToAction("Details", new { id = id, slug = slug }); } var model = db.Questions.Find(id); return View(model); }
Vous recherchez un itinéraire personnalisé. Si vous regardez de près, SO ne s’intéresse pas à la partie texte de l’URL. Alors:
http://stackoverflow.com/questions/xxxxxxxx/rails-sql-search-through-has-one-relationship AND http://stackoverflow.com/questions/xxxxxxxx/
Est-ce que les deux fonctionnent. Vous pouvez facilement le faire avec quelque chose comme:
routes.MapRoute( "Question", "questions/{id}/{title}", new { controller = "Question", action = "Details" });
L’astuce consiste à append le “slug” à la fin lorsque vous créez des liens:
@Html.RouteLink( "Read more.", "Question", new { id = question.Id, title = Slugger.ToUrl(question.Title) })