Pass viewbag to partial view from action controlle

2019-04-18 14:18发布

I have a mvc view with a partial view.There is a ActionResult method in the controller which will return a PartialView. So, I need to pass ViewBag data from that ActionResult method to Partial View.

This is my Controller

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

In Index.cshtml View

@Html.Partial("Step1")

Step1.cshtml partial view

@ViewBag.Hello

But this is not working. So, what is the correct way to get data from viewbag. I think I'm following wrong method. Please guide me.

6条回答
聊天终结者
2楼-- · 2019-04-18 14:44
return PartialView("partialviewname", obj);
查看更多
啃猪蹄的小仙女
3楼-- · 2019-04-18 14:47

You can try this in order to pass ViewBag to partial view from action:

Your controller:

public class PropertyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }


    public ActionResult Step1()
    {
        ViewBag.Hello = "Hello";

        return PartialView("_Partial1", ViewBag.Hello);
    }
}

Your view (Index.cshtml):

@Html.Action("Step1")

Your partial view (_Partial1.cshtml):

@ViewBag.Hello
查看更多
趁早两清
4楼-- · 2019-04-18 14:49

If you don't have to use ViewBag, you can use TempData. TempData is shared for the whole execution chain.

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

In Index.cshtml View

@Html.Partial("Step1")

Step1.cshtml partial view

@TempData["Hello"]
查看更多
小情绪 Triste *
5楼-- · 2019-04-18 15:00

Old question but if anyone here to find solution for this question..

You can pass viewbag value to partial with viewdatadictionary.

In your view:

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

and in partial view use it like this:

ViewData["permalink"]
查看更多
走好不送
6楼-- · 2019-04-18 15:03

"Child actions follow a different controller/model/view lifecycle than parent actions. As a result they do not share ViewData/ViewBag."

The answer provides an alternate way of passing data.

Does a child action share the same ViewBag with its "parents" action?

查看更多
一夜七次
7楼-- · 2019-04-18 15:03

You can use it as mentioned below :

In your View :

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

And Your partial View :

@model String

<b>@Model</b>

As Shown Above ViewBag.Message will be passed to the partial view. and in your partial view you can use it as a @Model.

Note : here type of ViewBag.Message is string. You can pass any type.

查看更多
登录 后发表回答