私はこのようなリンクがあります:
<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
私の疑問は、Iこの "Id"をmodel.parameter partにどのように渡すことができるのかということです。
私のコントローラーは:
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
を持っていたなら、あなたはあなたのパーシャルの中で同じものを参照することができます。
私が自分自身を探している間に私が単一の値のために見つけた最短の方法の1つは、このようにビューでモデルとして単一の文字列と設定文字列を渡すことです。
あなたの部分的な呼び出し側で
@Html.Partial("ParitalAction", "String data to pass to partial")
次に、このようにモデルをパーシャルビューでバインドします。
@model string
そしてこのようにパーシャルビューでその値を使うこと
@Model
配列、int、IDictionaryなどのより複雑なデータ型など、他のデータ型でも遊ぶことができます。
それが役に立てば幸い、
これは、オブジェクトをViewDataDictionaryに変換する拡張メソッドです。
public static ViewDataDictionary ToViewDataDictionary(this object values)
{
var dictionary = new ViewDataDictionary();
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(values))
{
dictionary.Add(property.Name, property.GetValue(values));
}
return dictionary;
}
そうすると、ビューの中でそれを使うことができます。
@Html.Partial("_MyPartial", new
{
Property1 = "Value1",
Property2 = "Value2"
}.ToViewDataDictionary())
これはnew ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
構文よりもはるかに優れています。
次に、部分ビューで、インデックス付きプロパティではなく動的オブジェクトからプロパティにアクセスするためにViewBag
を使用できます。
<p>@ViewBag.Property1</p>
<p>@ViewBag.Property2</p>
Asp.Netコアの方が使いやすい
<partial name="_MyPartialView" model="MyModel" />
例えば
@foreach (var item in Model)
{
<partial name="_MyItemView" model="item" />
}