1. ホーム
  2. asp.net-mvc

[解決済み] mvc 4 で部分ビューにパラメータを渡すにはどうすればよいですか?

2022-04-22 05:01:09

質問

このようなリンクがあります。

 <a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>

これをクリックすると、この部分ページが呼び出されます。

 @{
    switch ((string)ViewBag.Details)
    {

        case "Profile":
        {
           @Html.Partial("_Profile"); break;
        }

    }
}

部分ページ _Profile が含まれています。

Html.Action("Action", "Controller", model.Paramter) 

@Html.Action("MemberProfile", "Member", new { id=1 })   // id is always changing

私の疑問は、どのようにすれば このquot;Id"をmodel.parameter部分に渡します。 ?

私のコントローラは

 public ActionResult MemberHome(string id)
    {
        ViewBag.Details = id;
        return View();
    }
  public ActionResult MemberProfile(int id = 0)
    {
        MemberData md = new Member().GetMemberProfile(id);
        return PartialView("_ProfilePage",md);
    }

解決方法は?

ご質問の内容がわかりにくいのですが、要点をまとめると、メインビューに何らかの値があり、そのビューにレンダリングされるパーシャルにアクセスしたいだけなのでしょう。

パーシャル名だけでパーシャルをレンダリングすると

@Html.Partial("_SomePartial")

呼び出すのと同じように、暗黙のパラメータとしてモデルを渡します。

@Html.Partial("_SomePartial", Model)

さて、これを実際に使えるようにするためには、パーシャルにも定義されたモデルなどが必要ですが。

@model Namespace.To.Your.Model

@Html.Action("MemberProfile", "Member", new { id = Model.Id })

あるいは、ビューのモデルにない値 (ViewBagの中にあるか、ビュー自体で生成された値) を処理する場合は、ビューに ViewDataDictionary

@Html.Partial("_SomePartial", new ViewDataDictionary { { "id", someInteger } });

そして

@Html.Action("MemberProfile", "Member", new { id = ViewData["id"] })

モデルの場合と同様に、Razor は暗黙のうちにパーシャルをビューの ViewData をデフォルトで使用するため、もし ViewBag.Id をビューで使用する場合、同じものをパーシャルで参照することができます。