2010-11-18 14 views
2

Y a-t-il un moyen pour que je puisse exclure un champ ID de l'URL générée, tout en étant capable d'utiliser la valeur ID? Si vous prenez une URL StackOverflow:structure de routage et d'URL

http://stackoverflow.com/questions/3409196/asp-net-mvc-routing-question

Peut-être cette URL sans l'ID rendu Question?

Répondre

1

Vous pouvez afficher la question sans ID, mais le titre de la question doit être unique pour chaque question.

Vous pouvez également utiliser les ID pour rechercher des questions, puis rediriger vers une autre URL qui affiche uniquement le titre de la question. Si c'est comme ça que vous voulez le faire, je peux poster un exemple.

Voici un exemple:

// this method finds a file from database using the id 
//and passes the object with TempData 
    public ActionResult InitialDetail(int id) 
    { 
     var question = questionRepository.GetFile(id); 
     if (question==null) 
      return View("NotFound"); 
     else 
     { 
      TempData["question"] = question; 
      return Redirect("https://stackoverflow.com/questions/" + question.Name); 
     } 
    } 


//this method uses model passed from other method and displays it 
    public ActionResult Details(string questionName) 
    { 
     if (TempData["question"] == null) 
     { 
      return View("NotFound"); 
     } 
     else 
      return View("Details", TempData["question"]); 
    } 

Vous devez également définir un itinéraire pour que cela fonctionne

routes.MapRoute("QuestionPage", //Files/id/fileName 
      "questions/{questionName}", 
      new { controller = "Questions", action = "Details" }); 

Ajouter cette route juste avant la route par défaut. Il peut gâcher des choses si vous avez des routes pour l'URL commençant par http://domain.com/questions.

Remarque: Ceci peut ne pas être la meilleure solution. Si les titres de vos questions ne sont pas uniques, vous ne pouvez pas mettre de liens avec cette structure dans votre page. D'abord, il doit chercher une question en utilisant ID.

+0

est une mauvaise pratique? je pourrais passer une vue à une autre vue alors essentiellement? – fr3dr1k8009

+0

Pas que je sache de –

+0

Sauf erreur de ma part, la redirection serait une mauvaise pratique car vous ne seriez pas capable de copier et coller l'URL à quelqu'un afin qu'il puisse voir la même page (parce que le copier/coller n'aura pas la même TempData). Je ne sais pas comment les moteurs de recherche géreraient cela non plus. – KallDrexx