パーシャルビューを持つmvcビューがあります。PartialViewを返すコントローラーにはActionResultメソッドがあります。そのため、そのActionResultメソッドからViewBagデータをPartial Viewに渡す必要があります。
これは私のコントローラーです
public class PropertyController : BaseController
{
public ActionResult Index()
{
return View();
}
public ActionResult Step1()
{
ViewBag.Hello = "Hello";
return PartialView();
}
}
Index.cshtmlビューで
@Html.Partial("Step1")
Step1.cshtml部分ビュー
@ViewBag.Hello
しかし、これは機能していません。だから、ビューバッグからデータを取得する正しい方法は何ですか?私は間違った方法に従っていると思います。案内してください。
「子アクションは、親アクションとは異なるコントローラー/モデル/ビューライフサイクルに従います。その結果、それらはViewData/ViewBagを共有しません。」
答えは、データを渡す別の方法を提供します。
以下のように使用できます:
あなたの見解では:
@Html.Partial("[ViewName]", (string)ViewBag.Message)
そしてあなたの部分的なビュー:
@model String
<b>@Model</b>
上に示すように、ViewBag.Messageは部分ビューに渡されます。部分ビューでは、@ Modelとして使用できます。
注:ここでのタイプViewBag.Messageはstringです。任意のタイプを渡すことができます。
ViewBagを使用する必要がない場合は、TempDataを使用できます。 TempDataは実行チェーン全体で共有されます。
public class PropertyController : BaseController
{
public ActionResult Index()
{
return View();
}
public ActionResult Step1()
{
TempData["Hello"] = "Hello";
return PartialView();
}
}
Index.cshtmlビューで
@Html.Partial("Step1")
Step1.cshtml部分ビュー
@TempData["Hello"]
古い質問ですが、この質問の解決策を見つけるためにここに誰かがいる場合..
Viewdatadictionaryを使用して、viewbag値をpartialに渡すことができます。
あなたの見解では:
@Html.Partial("_Partial", "", new ViewDataDictionary { { "permalink", ViewBag.Permalink } })
部分ビューでは、次のように使用します。
ViewData["permalink"]
ViewBagをアクションから部分ビューに渡すためにこれを試すことができます:
コントローラー:
public class PropertyController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Step1()
{
ViewBag.Hello = "Hello";
return PartialView("_Partial1", ViewBag.Hello);
}
}
あなたのビュー(Index.cshtml):
@Html.Action("Step1")
部分ビュー(_Partial1.cshtml):
@ViewBag.Hello