質問

システム内のすべてのページに存在するウィジェット コントロールを実装しようとしています。これにより、ユーザーは各ページで基本的な検索とディレクトリの機能を利用できるようになります。これは以下で定義されるタブ コントロールです。 <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.RenderActionobject routeValues これは、呼び出しているアクションのパラメータを含む辞書です。 Key. 。パラメータで渡すパラメータを指定しない場合、 routeValues あなたのパラメータ Html.RenderAction それは常に通過します object の価値 vm アクションのパラメータ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top