Frage

Ich versuche, eine Widget Kontrolle zu implementieren, die auf jeder Seite im System vorhanden ist, die der Benutzer auf jeder Seite zur Verfügung Grunde Search & Directory-Funktionalität haben kann. Dies ist eine Registersteuer unten definiert, wo in der <ul> der aktuell ausgewählte Registerkarte durch den Wert in Model.CurrentTab bestimmt wird und dass der entsprechende Inhalt I (im Allgemeinen, sichtbar zu machen) angezeigt werden soll wird auch von diesem Wert bestimmt.

<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>

Der Grund, warum ich sowohl Search und Directory laden möchten ist, so dass die Seite nicht den Inhalt muss anfordern je nachdem, welche Registerkarte geklickt wird. Ich will alles sofort zur Verfügung steht.

Das Problem, das ich habe, ist, dass, wenn CurrentTab den Wert „Directory“ enthält dieses Mittel (I angenommen), dass Html.RenderAction("SearchBox"... in einem leeren String übergeben sollte. Aber wenn es um die Aktion-Methode wird, enthält die Ansicht Modell ging in SearchBox Wert und nicht ""

Ich verstehe nicht, warum dies geschieht. Selbst wenn ich eine leere Zeichenfolge in SearchBox passieren, enthält die Ansicht Modell noch einen Wert. Kann jemand bitte erklären, was los ist? Soll ich das anders?

tun

Update:

    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
    }

Sowohl DirectoryViewModel und SearchViewModel enthalten eine Eigenschaft namens Search

War es hilfreich?

Lösung

Die Modelbinder wird neu () auf ein beliebiges Objekt in Parameter einer ActionMethod. Ich glaube nicht, das Verhalten Ihrer eigenen modelbidner ohne Umsetzung ausgeschaltet werden kann. Sie müssen eine Überlastung schaffen, das es keine Parameter und Route entsprechend hat.

Andere Tipps

Wenn Sie so etwas wie diese

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

Da der dritte Parameter der Html.RenderAction object routeValues ist das ein Wörterbuch mit einem Parameter der Aktion ist, die Sie als Key anrufen. Wenn Sie die Parameter nicht angeben, dass Sie in Ihrem routeValues Parameter Ihrer Html.RenderAction sind vorbei wird es immer einen object Wert auf den vm Parameter Ihrer Aktion übergeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top