Ich habe eine Tonne über dieses Problem gelesen, aber ich kann es nicht herausfinden.ASP.NET MVC DropDownList Ausgewählter Wert Problem
Ich habe eine Dropdown-Liste in meiner Ansicht, die für Paging verwendet wird. Sie wählen die Seite aus, zu der Sie wechseln möchten, und das Formular wird gesendet. Wenn die Ansicht zurückgegeben wird, wird die angeforderte Seite angezeigt. Die Dropdownliste ändert sich entsprechend der neu angezeigten Seite. Das funktioniert gut.
Mein Problem ist das: Ich habe 2 Submit-Tasten, eine für die nächste Seite und eine für die vorherige Seite. Wenn in der Steuerung eine der Submits gedrückt wurde, sollte die Seite # um 1 inkrementiert oder dekrementiert werden. Dies geschieht, und die richtige Seite der Daten wird angezeigt. Aber die Dropdown-Liste spiegelt, egal was ich tue, nicht die neue Seitennummer wider, wenn die Ansicht angezeigt wird.
Wenn das Dropdown-Menü vom Benutzer geändert wird, spiegelt es diese Änderungen wider, wenn es nach der Übermittlung eines Formulars zurückgesendet wird. Wenn ich die Seite # programmgesteuert ändere, ändert sich das Dropdown-Menü nicht, obwohl die richtige Seite der Daten angezeigt wird. Hier
ist die Aktionsmethode:
public ActionResult Results(TechSearch search, string NextPage, string PrevPage)
{
if (NextPage != null) search.Page++;
if (PrevPage != null) search.Page--;
int resultCount = search.GetResultCount(Desk);
List<int> pages = new List<int>();
int pageCount = (int)Math.Ceiling((decimal)resultCount/search.PageSize);
for (int i = 1; i <= pageCount; i++) pages.Add(i);
ViewData["pages"] = new SelectList(pages, search.Page);
ViewData["pageCount"] = pageCount;
return View(search);
}
Und hier ist der relevante Teil der Ansicht:
<input type="submit" value="<" name="PrevPage" />
Page
<%=Html.DropDownList("Page",(SelectList)ViewData["pages"]) %>
of
<%=ViewData["pageCount"]%>
<input type="submit" value=">" name="NextPage" />
Bitte helfen.
EDIT
Seite 333 von Pro ASP.NET MVC Framework by Steven Sanderson:
Wie Input-Steuerelemente ihre Werte Get
Jede [HTML-Helfer für Input-Steuerelemente Rendering] zu bevölkern versucht, sich von der Suche für einen Wert an folgenden Stellen, in dieser Reihenfolge der Priorität:
- ViewData.ModelState [ „control“]. Value.RawValue
- Wert Parameter HTML-Hilfs-Methode übergeben, oder wenn Sie haben eine Überlastung genannt, die keinen Wert Parameter enthält, dann Viewdata .Eval („control“)
Model ist ein temporärer Speicherbereich, der ASP.NET MVC eingehenden versucht Werte plus Bindungs und Validierungsfehler behalten verwendet. Beachten Sie, dass es an der Spitze der Prioritätenliste ist, so seine Werte überschreiben alles, was Sie möglicherweise explizit festlegen. Diese Konvention bedeutet, dass Sie einen expliziten Wertparameter übergeben können, der als Standardwert oder Initialwert des Helfers fungiert. aber wenn die Ansicht nach einem Validierungsfehler erneut rendering, wird der Helfer jeden benutzerdefinierten Wert in Präferenz zu diesem Standard beibehalten.
Ich habe überprüft, dass ViewData.ModelState ["Page"]. Value.RawValue enthält die unerwartete Seitennummer, die mich belästigt. Was ist der beste Weg, um dies zu umgehen?
+1 Wirklich nette Verwendung der Zeichenfolgen und Modellbindung, um eine lesbare Analyse zu machen, von denen Senden-Taste gedrückt wurde. –
@Dan - Danke. Ich habe das von Pro ASP.NET MVC Framework von Steven Sanderson im Abschnitt über Wizards und Multistep Forms (S. 396) aufgegriffen. –
Steven Sandersons Buch ist sehr gut. – RichardOD