J'ai une vue de mvc avec une vue partielle. Il y a une méthode ActionResult dans le contrôleur qui renverra une PartialView. Je dois donc transmettre les données ViewBag de cette méthode ActionResult à la vue partielle.
Ceci est mon contrôleur
public class PropertyController : BaseController
{
public ActionResult Index()
{
return View();
}
public ActionResult Step1()
{
ViewBag.Hello = "Hello";
return PartialView();
}
}
Dans la vue Index.cshtml
@Html.Partial("Step1")
Vue partielle Step1.cshtml
@ViewBag.Hello
Mais ça ne fonctionne pas. Alors, quelle est la bonne façon d’obtenir des données de viewbag… Je pense que je suis la mauvaise méthode. Guidez-moi s'il-vous-plaît.
"Les actions enfants suivent un cycle de vie contrôleur/modèle/vue différent de celui des actions parent. Par conséquent, elles ne partagent pas ViewData/ViewBag."
La réponse fournit un autre moyen de transmettre des données.
Une action enfant partage-t-elle le même ViewBag avec son action "parents"?
Vous pouvez l'utiliser comme mentionné ci-dessous:
Dans votre vue:
@Html.Partial("[ViewName]", (string)ViewBag.Message)
Et votre vue partielle:
@model String
<b>@Model</b>
Comme indiqué ci-dessus, ViewBag.Message sera transmis à la vue partielle. et dans votre vue partielle, vous pouvez l'utiliser comme @Model .
Remarque: ici type de ViewBag.Message est chaîne . Vous pouvez passer n'importe quel type.
Si vous n'êtes pas obligé d'utiliser ViewBag, vous pouvez utiliser TempData. TempData est partagé pour toute la chaîne d'exécution.
public class PropertyController : BaseController
{
public ActionResult Index()
{
return View();
}
public ActionResult Step1()
{
TempData["Hello"] = "Hello";
return PartialView();
}
}
Dans la vue Index.cshtml
@Html.Partial("Step1")
Vue partielle Step1.cshtml
@TempData["Hello"]
Vieille question mais si quelqu'un ici trouve une solution à cette question ..
Vous pouvez passer la valeur de viewbag à partielle avec viewdatadictionary.
A votre avis:
@Html.Partial("_Partial", "", new ViewDataDictionary { { "permalink", ViewBag.Permalink } })
et en vue partielle l'utiliser comme ceci:
ViewData["permalink"]
Vous pouvez essayer ceci afin de passer ViewBag à une vue partielle de l'action:
Votre contrôleur:
public class PropertyController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Step1()
{
ViewBag.Hello = "Hello";
return PartialView("_Partial1", ViewBag.Hello);
}
}
Votre vue (Index.cshtml):
@Html.Action("Step1")
Votre vue partielle (_Partial1.cshtml):
@ViewBag.Hello