将数据从“部分视图”传递到其父视图
如果我有视图和部分视图,有什么方法可以将数据从部分视图传递给父视图?
所以,如果我有View.cshtml
:
@Html.Partial("_PartialView")
和_PartialView.cshtml
:
@{ someDataFromPartialSomehow = "some-data" } Some content
我将如何实现这样的事情?
我尝试使用ViewBag.SomeDataFromPartialSomehow
,但这只会在Parent中导致null
。
一次尝试
要尝试解决在调用之前生成的数据问题,我试过这个:
View.cshtml
:
@{ var result = Html.Partial("_PartialView"); } @result
_PartialView.cshtml
:
@{ ViewData["Stuff"] = "foo"; } Content
但是对@ViewDate["Stuff"]
的调用仍然没有遗憾。
您可以使用HttpContext在视图之间共享状态。
@{ this.ViewContext.HttpContext.Items["Stuff"] = "some-data"; }
然后:
@{ var result = Html.Partial("_PartialView"); } @result
除了您在问题中显示的示例:
@Html.Partial("_PartialView")
你试图使用someDataFromPartialSomehow
甚至在调用部分视图之前 ,这显然是不可能的。
还要记住,你想要实现的是糟糕的设计。 如果部分视图只能在某个特定父级的上下文中工作,那么您可能需要重新考虑视图分离。 部分视图必须是独立和可重用的,无论它在哪种上下文中。 如果它假定托管父母的事情,那么这里有一个严重的设计问题。
我有个建议。
将隐藏的输入字段放在局部视图中并从javascript中获取它们。
例如:在_PartialView.cshtml中
在你看来
请注意,您必须在文档就绪函数内编写js函数,因为部分视图应该完全加载。
所以经过一番思考后我想出了这个:
View.cshtml
:
@{ dynamic properties = new NullingExpandoObject(); var result = Html.Partial("_PartialView", (NullingExpandoObject)properties); } @result
_PartialView.cshtml
:
@{ Model.Id = "foo"; } Content
其中NullingExpandoObject
是Jon Skeet的可空动态字典