7

ビューと部分ビューがある場合、部分ビューから親にデータを渡す方法はありますか?

だから私が持っている場合View.cshtml:

<div id="@someDataFromPartialSomehow">
    @Html.Partial("_PartialView")
</div>

そして_PartialView.cshtml

@{ someDataFromPartialSomehow = "some-data" }

<div>
    Some content
</div>

このようなものを実装するにはどうすればよいですか?

を使用しようとしましViewBag.SomeDataFromPartialSomehowたが、これnullは親になります。


試み

呼び出される前にデータが生成される問題を回避するために、次のことを試しました。

View.cshtml:

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

<div id="@ViewData["Stuff"]">
    @result
<div>

_PartialView.cshtml:

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

<div>
    Content
</div>

しかし、残念ながら、呼び出しは@ViewDate["Stuff"]まだ何もレンダリングしません。

4

5 に答える 5

24

HttpContext を使用して、ビュー間で状態を共有できます。

@{
    this.ViewContext.HttpContext.Items["Stuff"] = "some-data";
}

その後:

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

<div id="@this.ViewContext.HttpContext.Items["Stuff"]">
    @result
<div>

あなたの質問で示した例を除いて:

<div id="@someDataFromPartialSomehow">
    @Html.Partial("_PartialView")
</div>

明らかに不可能な部分ビューを呼び出すBEFOREを使用しようとしていますsomeDataFromPartialSomehow

また、達成しようとしているのは悪い設計であることにも注意してください。部分的なビューが特定の親のコンテキストでのみ機能する場合は、ビューの分離を再考する必要があるかもしれません。部分ビューは、それが配置されているコンテキストに関係なく、独立して再利用可能でなければならないものです。ホスティングの親に関することを想定している場合、ここには深刻な設計上の問題があります。

于 2013-11-04T11:16:38.010 に答える
1

そこで、いろいろ考えた結果、次のように思いつきました。

View.cshtml:

@{ 
    dynamic properties = new NullingExpandoObject();

    var result = Html.Partial("_PartialView", (NullingExpandoObject)properties); 
}

<div id="@properties.Id">
    @result
<div>

_PartialView.cshtml:

@{ Model.Id = "foo"; }

<div>
    Content
</div>

NullingExpandoObjectJon Skeet の nullable 動的辞書はどこにありますか

于 2013-11-04T18:02:43.580 に答える