将viewbag从动作控制器传递到局部视图

cp1*_*100 17 c# asp.net-mvc asp.net-mvc-partialview razor asp.net-mvc-4

我有一个部分视图的mvc视图.控制器中有一个ActionResult方法,它将返回一个PartialView.所以,我需要将ViewRag数据从ActionResult方法传递给Partial View.

这是我的控制器

public class PropertyController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Step1()
    {
        ViewBag.Hello = "Hello";
        return PartialView();
    }
}
Run Code Online (Sandbox Code Playgroud)

在Index.cshtml视图中

@Html.Partial("Step1")
Run Code Online (Sandbox Code Playgroud)

Step1.cshtml局部视图

@ViewBag.Hello
Run Code Online (Sandbox Code Playgroud)

但这不起作用.那么,从viewbag获取数据的正确方法是什么.我想我正在遵循错误的方法.请指导我.

Spi*_*ode 13

你可以按照下面的说法使用它:

在您的视图中:

@Html.Partial("[ViewName]", (string)ViewBag.Message)
Run Code Online (Sandbox Code Playgroud)

而你的部分观点:

@model String

<b>@Model</b>
Run Code Online (Sandbox Code Playgroud)

如上所示,ViewBag.Message将传递给局部视图.在局部视图中,您可以将其用作@Model.

注意:这里ViewBag.Message的类型是字符串.你可以传递任何类型.


Vey*_*mir 9

如果您不必使用ViewBag,则可以使用TempData.TempData是整个执行链共享的.

public class PropertyController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Step1()
    {
        TempData["Hello"] = "Hello";
        return PartialView();
    }
}
Run Code Online (Sandbox Code Playgroud)

在Index.cshtml视图中

@Html.Partial("Step1")
Run Code Online (Sandbox Code Playgroud)

Step1.cshtml局部视图

@TempData["Hello"]
Run Code Online (Sandbox Code Playgroud)


ps2*_*oat 6

"子操作遵循与父操作不同的控制器/模型/视图生命周期.因此,它们不共享ViewData/ViewBag."

答案提供了另一种传递数据的方法.

子动作是否与其"父母"动作共享相同的ViewBag?


小智 6

旧问题,但是否有人在此问题上找到解决方案。

您可以使用viewdatadictionary将viewbag值传递给partial。

您认为:

@Html.Partial("_Partial", "", new ViewDataDictionary { { "permalink", ViewBag.Permalink } })
Run Code Online (Sandbox Code Playgroud)

并在局部视图中使用它,如下所示:

ViewData["permalink"]
Run Code Online (Sandbox Code Playgroud)