2010-11-18 11 views
2

IDフィールドを生成されたURLから除外できますが、それでもID値を使用できるのでしょうか?あなたはStackOverflowのURLを取る場合:ルーティングとURLの構造

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

は、そのURLは質問IDなしでレンダリングすることができますか?

答えて

1

IDなしで質問を表示できますが、質問のタイトルはすべての質問に対して一意でなければなりません。

また、IDを使用して質問を検索し、質問タイトルのみを表示する別のURLにリダイレクトすることもできます。それがあなたがそれをしたいと思っているなら、私は例を掲示することができます。ここで

は例です:

// 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"]); 
    } 

あなたはまた、

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

だけでデフォルトルートの前に、このルートを追加します動作するように、このためのルートを定義する必要があります。 http://domain.com/questionsで始まるURLのルートがあると、混乱する可能性があります。

注:これは最適な解決策ではありません。質問のタイトルが一意でない場合は、この構造のリンクをページに配置することはできません。まず、IDを使って質問を探す必要があります。

+0

がリダイレクトされていますか?私は基本的に別のビューにビューを渡すことができますか? – fr3dr1k8009

+0

私には分かりません –

+0

私が誤解していない限り、リダイレクトは悪い習慣になります。誰かにコピー&ペーストして同じページを見ることができないからです。(コピー/ペーストにはTempData)。私は検索エンジンがこれをどのように処理するかを知らない。 – KallDrexx