问题
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.
回答1:
"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?
回答2:
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.
回答3:
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"]
回答4:
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"]
回答5:
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
回答6:
return PartialView("partialviewname", obj);
来源:https://stackoverflow.com/questions/20368331/pass-viewbag-to-partial-view-from-action-controller