2010-12-19 6 views
0

Im Grunde habe ich angefangen, an dieser App zu arbeiten, nichts über Web-Entwicklung wissen, die meine Suche-Fu stark hemmt. Wahrscheinlich sollte ein Buch lesen, aber das ist nicht wahrscheinlich. Mit ASP.NET MVC3 RC2 versuche ich eine stark typisierte Teilansicht zu erstellen, die zu verwandten Elementen navigieren kann, sowie eine Brotkrumenspur (die ich für eine Liste in der ViewBag halten würde) beizubehalten. Eine gute Analogie wäre eine Wörterbuchseite mit einer Thesaurus-Unteransicht.Stark typisierte Teilansicht Navigation

class Entry 
{ 
    string Name; 
    string Definition; 
    IEnumerable<Entry> Synonyms; 
} 

In erster Linie zeigt die Seite das Wort und seine Definition, etc. Aber es gibt einen div mit Synonymen, die Sie anklicken können, w/Ajax das ausgewählte Wort Synonyme ersetzt zu sehen.

Ich dachte zuerst, ich müsste einen HTML-Helfer machen, aber dann sah ich Sachen über die Rückgabe von PartialView von meinem Controller, die viel besser scheint.

Ich habe Probleme, alle Teile des Puzzles zusammenzusetzen. Eine Probe oder ein Entwurf wäre großartig.

Danke!

Antwort

1

Mann, ich wusste, ich hätte noch etwas länger daran arbeiten sollen, bevor ich gefragt habe.

So, hier ist das Rezept:

  1. Machen Sie eine Funktion in der Steuerung, Synonym(id) { return PartialView(GetEntry(id)); }
  2. Machen Sie eine Teilansicht, Synonym.cshtml, stark in den Entry eingegeben haben.
  3. Anzeige der Teilansicht in Ihrer Hauptanzeige mit <div id="Synonyms">@{Html.RenderAction("Synonym", @Model.Id);}</div>
  4. Für die Ajax-Navigation Link in Synonym.cshtml, so etwas wie dieses

    @foreach(Entry syn in @Model.Synonyms) 
        @Ajax.ActionLink((string)@syn.Name, "Synonym", 
         new { id = @syn.Id }, new AjaxOptions { UpdateTargetId = "Synonyms" }) 
    

Eine Sache, die kurz angesprochen mich aufbrauchen war die new { id = @syn.Id } weil der Parametername in meinem Controller tatsächlich Nummer war, musste ich new { number = ... }

verwenden Oh, und ich fragte nach der Navigation. Ich denke, dass der Zurück-Knopf des Browsers für die meisten Navigation ausreichen wird, aber immer noch einen Link "Zurück zum aktuellen Wort" wollte. Dafür habe ich die folgenden:

  1. Modified Controller.Synonym einen anderen Parameter zu nehmen, int orig und setzen ViewBag.OrigId = orig; vor der Rückkehr.
  2. die ActionLinks Modified sagen new { id = @syn.Id, orig = @ViewBag.OrigId }
  3. die Rückseite Link in Synonym.cshtml Erstellt - @Ajax.ActionLink("Back To Current Word", "Synonym", new { id = @ViewBag.OrigId, orig = @ViewBag.OrigId }, new AjaxOptions { UpdateTargetId = "Synonyms" })
  4. den Anruf zu @Html.RenderAction Modified ein Objekt wie in den ActionLinks sonst new { id = @Model.Id, orig = @Model.Id }

Wenn jemand kommt passieren mit einer besseren Antwort, die mich dazu bringt, meine Sachen umzuschreiben, akzeptiere ich stattdessen ihre. Und ich würde gerne Feedback darüber bekommen, ob ich etwas vermisse, wie ich den zweiten Parameter für Controller.Synonym oder andere Vereinfachungen oder Verbesserungen vermeiden könnte.