web-dev-qa-db-ja.com

ビューコントローラーをアクションコントローラーから部分ビューに渡す

パーシャルビューを持つ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

しかし、これは機能していません。だから、ビューバッグからデータを取得する正しい方法は何ですか?私は間違った方法に従っていると思います。案内してください。

17
cp100

「子アクションは、親アクションとは異なるコントローラー/モデル/ビューライフサイクルに従います。その結果、それらはViewData/ViewBagを共有しません。」

答えは、データを渡す別の方法を提供します。

子アクションは、その「親」アクションと同じViewBagを共有しますか?

6
ps2goat

以下のように使用できます:

あなたの見解では:

@Html.Partial("[ViewName]", (string)ViewBag.Message)

そしてあなたの部分的なビュー:

@model String

<b>@Model</b>

上に示すように、ViewBag.Messageは部分ビューに渡されます。部分ビューでは、@ Modelとして使用できます。

注:ここでのタイプViewBag.Messagestringです。任意のタイプを渡すことができます。

13
SpiderCode

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"]
9
Veysel Özdemir

古い質問ですが、この質問の解決策を見つけるためにここに誰かがいる場合..

Viewdatadictionaryを使用して、viewbag値をpartialに渡すことができます。

あなたの見解では:

@Html.Partial("_Partial", "", new ViewDataDictionary { { "permalink", ViewBag.Permalink } })

部分ビューでは、次のように使用します。

ViewData["permalink"]
6
bthn

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
0
Andrew Sin