0

システムのすべてのページに存在するウィジェットコントロールを実装しようとしています。これにより、ユーザーは各ページで基本的な検索とディレクトリ機能を利用できるようになります。これは以下に定義されているタブコントロールです。<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
    }

両方DirectoryViewModelSearchViewModelというプロパティが含まれていますSearch

4

2 に答える 2

1

ModelBinder は、ActionMethod のパラメーター内の任意のオブジェクトを new() します。独自の modelbidner を実装しないと、この動作をオフにできないと思います。パラメータを持たないオーバーロードを作成し、それに応じてルーティングする必要があります。

于 2010-09-03T02:07:20.690 に答える
0

このようなことをしているのだろうか

 <% Html.RenderAction("SearchBox", "Search", 
                    new { vm = ((Model.CurrentTab == "Search") ? Model.Search : "") }); %>

の 3 番目のパラメーターは、Html.RenderActionとしてobject routeValues呼び出しているアクションのパラメーターを持つ辞書であるためKeyです。routeValuesパラメーターに渡すパラメーターを指定しない場合、Html.RenderAction常にアクションobjectのパラメーターに値が渡されます。vm

于 2010-09-03T00:39:03.470 に答える