将数据从"部分视图"传递到其父视图

dav*_*v_i 7 c# asp.net-mvc razor

如果我有视图和部分视图,有什么方法可以将数据从部分视图传递给父视图?

所以,如果我有View.cshtml:

<div id="@someDataFromPartialSomehow">
    @Html.Partial("_PartialView")
</div>
Run Code Online (Sandbox Code Playgroud)

而且_PartialView.cshtml:

@{ someDataFromPartialSomehow = "some-data" }

<div>
    Some content
</div>
Run Code Online (Sandbox Code Playgroud)

我将如何实现这样的事情?

我尝试使用ViewBag.SomeDataFromPartialSomehow,但这只是导致null父.


一次尝试

要尝试解决在调用之前生成的数据问题,我试过这个:

View.cshtml:

@{ var result = Html.Partial("_PartialView"); }

<div id="@ViewData["Stuff"]">
    @result
<div>
Run Code Online (Sandbox Code Playgroud)

_PartialView.cshtml:

@{ ViewData["Stuff"] = "foo"; }

<div>
    Content
</div>
Run Code Online (Sandbox Code Playgroud)

@ViewDate["Stuff"]不幸的是,召唤仍然没有任何结果.

Dar*_*rov 24

您可以使用HttpContext在视图之间共享状态.

@{
    this.ViewContext.HttpContext.Items["Stuff"] = "some-data";
}
Run Code Online (Sandbox Code Playgroud)

然后:

@{ var result = Html.Partial("_PartialView"); }

<div id="@this.ViewContext.HttpContext.Items["Stuff"]">
    @result
<div>
Run Code Online (Sandbox Code Playgroud)

除了您在问题中显示的示例:

<div id="@someDataFromPartialSomehow">
    @Html.Partial("_PartialView")
</div>
Run Code Online (Sandbox Code Playgroud)

你试图使用someDataFromPartialSomehow甚至BEFORE调用部分视图,这显然是不可能的.

还要记住,你想要实现的是糟糕的设计.如果部分视图只能在某个特定父级的上下文中工作,那么您可能需要重新考虑视图分离.部分视图必须是独立和可重用的,无论它在哪种上下文中.如果它假定托管父母的事情,那么这里有一个严重的设计问题.