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します。
OPの詳細ActionResultのパラメータがすでに初期化されている場合、 'public ActionResult Details(int id = 0)'、ActionLinkのrouteValueは無意味ではないでしょうか?またはOPのrouteValue *は 'int id = 0? 'をオーバーライドします –
' int id = 0'は値が0のデフォルトパラメータを意味します。したがって、 'id'値が与えられていれば、 、0が引き続き使用されます。 –
ああ、それは*オプションのパラメータ*ですか? –