2016-06-14 9 views
0

私のプロジェクトでは、ホームコントローラとホテルコントローラの2つのコントローラがあります。ビューモデルを使用して2つのモデルクラスを結合しました。ID値が別のアクションメソッドに渡されません

ホームコントローラ

public ActionResult Index(){ 
     List<ImageData> details = new List<ImageData>(); 

     var sp_details = (from s in db.service_provider 
          join p in db.pictures on s.SPID equals p.SPID 
          join c in db.cities on s.City_ID equals c.City_ID 
          select new { s.SPID, s.Sp_name, s.Sp_rate, s.service_type, c.Cityname, p.pic }).OrderByDescending(s => s.Sp_rate).Where(p => p.service_type == "Restaurant").Take(3).ToList(); 

     foreach (var item in sp_details) 
     { 
      ImageData SpView = new ImageData(); // ViewModel 
      SpView.SPID = item.SPID; 
      SpView.Sp_name = item.Sp_name; 
      SpView.Cityname = item.Cityname; 
      SpView.Sp_rate = item.Sp_rate; 
      SpView.pic = item.pic; 

      details.Add(SpView); 
     } 
     return View(details); 
    } 

ホテルコントローラ

public ActionResult Details(int id = 0) 
    { 
     List<ImageData> details = new List<ImageData>(); 

     var sp_details = (from s in db.service_provider 
          join p in db.pictures on s.SPID equals p.SPID 
          join c in db.cities on s.City_ID equals c.City_ID 
          where s.SPID == id 
          select new ImageData() 
          { 
           Sp_name = s.Sp_name, 
           Sp_location = s.Sp_location, 
           Cityname = c.Cityname, 
           service_type = s.service_type, 
           Sp_description = s.Sp_description, 
           Sp_rate = s.Sp_rate, 
           Sp_web = s.Sp_web, 
           Cnt_wh = s.Cnt_wh, 
           pic = p.pic 
          }); 



     if (details == null) 
     { 
      return HttpNotFound(); 
     } 

     return View(sp_details); 
    } 

以下のホテルコントローラで詳細アクションメソッドへのid値に合格したインデックスview.Iの一部です。私は新たなんだ渡されていないとホテルController.Sinceで詳細対処方法の詳細を表示しない

<p class="name">@Html.ActionLink(item.Sp_name, "Details","Hotel", new { id = item.SPID })</p> 

が、値が、私は間違いを見つけることができませんでし4 MVCします。

答えて

0

あなたhtmlAttributesパラメータに相当するであろうし、あなたのオブジェクトが正しくルーティングパラメータとして渡されたことを確認するためにthis overloadにマッチする追加のnullパラメータを含め、明示的に試してみてください。

@Html.ActionLink(item.Sp_name, "Details","Hotel", new { id = item.SPID }, null) 

ActionLink()ヘルパーは、過負荷が含まれていませんあなたが提供したテキスト、アクション、コントローラ、RouteValuesしか受け付けないので、この余分なパラメータが必要です。

+0

OPの詳細ActionResultのパラメータがすでに初期化されている場合、 'public ActionResult Details(int id = 0)'、ActionLinkのrouteValueは無意味ではないでしょうか?またはOPのrouteValue *は 'int id = 0? 'をオーバーライドします –

+0

' int id = 0'は値が0のデフォルトパラメータを意味します。したがって、 'id'値が与えられていれば、 、0が引き続き使用されます。 –

+0

ああ、それは*オプションのパラメータ*ですか? –

関連する問題