RenderAction に「」を渡すと、この View Model が設定されるのはなぜですか?
-
26-09-2019 - |
質問
システム内のすべてのページに存在するウィジェット コントロールを実装しようとしています。これにより、ユーザーは各ページで基本的な検索とディレクトリの機能を利用できるようになります。これは以下で定義されるタブ コントロールです。 <ul>
現在選択されているタブは、の値によって決まります。 Model.CurrentTab
また、表示したい (基本的に可視化する) 対応するコンテンツもその値によって決まります。
<div class="WidgetControl">
<ul class="WidgetTab tabs">
<li <%= (Model.CurrentTab == "Search") ? "class='active'" : "" %>>
<span href='<%= Url.Action("SearchBox", "Search") %>'>Search</span>
</li>
<li <%= (Model.CurrentTab == "Directory") ? "class='active'" : "" %>>
<span href='<%= Url.Action("DirectoryList", "Group") %>'>Directory</span>
</li>
</ul>
<div id="Search" class="tab_container">
<% Html.RenderAction("SearchBox", "Search"
, (Model.CurrentTab == "Search") ? Model.Search : ""); %>
</div>
<div id="Directory" class="tab_container">
<% Html.RenderAction("DirectoryList", "Group"
, (Model.CurrentTab == "Directory") ? Model.Search : ""); %>
</div>
</div>
両方載せたい理由 Search
そして Directory
これは、クリックされたタブに応じてページがコンテンツをリクエストする必要がないようにするためです。すべてすぐに利用できるようにしたいのです。
私が抱えている問題は、 CurrentTab
「Directory」という値が含まれているということは、次のことを意味します(私はそう思いました)。 Html.RenderAction("SearchBox"...
空の文字列を渡す必要があります。ただし、アクション メソッドに到達すると、ビュー モデルが渡されます。 SearchBox
値が含まれているが含まれていない ""
なぜこんなことが起こるのか分かりません。空の文字列を渡しても SearchBox
, 、ビューモデルにはまだ値が含まれています。誰か何が起こっているのか説明してもらえますか?これを別の方法で行う必要がありますか?
アップデート:
public PartialViewResult DirectoryList(DirectoryViewModel vm)
{
return PartialView(vm.Search); // this is expecting a string
}
public PartialViewResult SearchBox(SearchViewModel vm)
{
return PartialView(vm); // the among other things, the Search string is used
}
両方 DirectoryViewModel
そして SearchViewModel
というプロパティが含まれています Search
解決
ModelBinder は、ActionMethod のパラメーター内の任意のオブジェクトを new() します。独自のmodelbidnerを実装しない限り、この動作をオフにすることはできないと思います。パラメーターを持たないオーバーロードを作成し、それに応じてルーティングする必要があります。
他のヒント
このようなことをする必要がありますか
<% Html.RenderAction("SearchBox", "Search",
new { vm = ((Model.CurrentTab == "Search") ? Model.Search : "") }); %>
の 3 番目のパラメータ以来、 Html.RenderAction
は object routeValues
これは、呼び出しているアクションのパラメータを含む辞書です。 Key
. 。パラメータで渡すパラメータを指定しない場合、 routeValues
あなたのパラメータ Html.RenderAction
それは常に通過します object
の価値 vm
アクションのパラメータ。