2010-12-18 6 views
4

MVC-3で発信ルートを生成する際に問題が発生しました。ViewBagとRoute(MVC 3 - RC2)の問題

これは、私は両方のシナリオのために午前ページのアドレスである:ここでhttp://localhost:1283/Conflict/Create/1200/300

は、マップのルートは以下のとおりです。

routes.MapRoute(
    null, // Route name 
    "{controller}/{action}/{custId}/{projId}", // URL with parameters 
    null, // Parameter defaults 
    new { custId = @"\d+", projId = @"\d+" } 
); 

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

シナリオ1:

コントローラから

public ActionResult Create(int custId, int projId) 
{ 
    return View(); 
} 

ビューから:

@Html.ActionLink("Back to List", "Index", "Conflict", new { custId = ViewBag.custId, projId = ViewBag.projId }, null) 

作成される結果のリンク。

http://localhost:1283/Conflict?custId=1200&projId=300

次のように私は読むために、コントローラのコードを変更した場合:

public ActionResult Create(int custId, int projId) 
{ 
     ViewBag.custId = custId; 
     ViewBag.projId = projId; 

     return View(); 
} 

私は、コントローラと、以下のリンクにそれらの2行を追加、ビュー内の任意の変更を行いませんでした作成されます。私はここで何をしないのです

http://localhost:1283/Conflict/Index/1200/300

?これは一貫した動作で、私はアプリケーションの他の領域でこれを再現することができました。 "解決策"は明らかですが、私の質問はなぜですか?

+0

私のマシンでこの動作を再現できません!奇妙な – swapneel

+0

インデックスアクションメソッドまたは作成?あなたのactionlinkの2番目のパラメータは "Index"ですか? –

答えて

2

「?custId = 1200 & projId = 300」というリンクがあなたのページを取得するために使用したリンクからやり取りされています。

  1. /紛争/インデックスパスを生成ViewBagでCUSTIDとprojIdのための外観をし、ちょうどあなたのクエリ文字列を追加し
  2. 代わりに、クエリ文字列を検索します
  3. :だからHtml.ActionLinkコールがこれをやっています

2番目のシナリオでは、実際に値を提供しているため、リンクは正常に生成されています。希望が役立ちます。

関連する問題