In letzter Zeit habe ich mit einer nervigen Situation auf ASP.NET MVC gekämpft. Hier ist die Geschichte in Kurzform,
Ich soll eine Ansicht haben, die alle Produkte auflistet; Jetzt, weil diese Produkte zu viele sind, blog ich sie (sehr innovativ heh!). Die Seite enthält zwei Paging-Pfeile - "Nächste 10 Produkte", "und vorherige 10 Produkte". Die Ansicht wird an eine IEnumerable<Product>
Sammlung übergeben, die die Liste der anzuzeigenden Produkte enthält. Der Ansicht werden auch zwei Ganzzahlen (currentPage, totalPages) als ViewData-Elemente übergeben. Was ich nun erreichen muss, ist zu überprüfen, ob es die erste Seite ist (ViewData ["CurrentPage"] == 0) Ich sollte die CSS-Klasse des "vorherige 10 Seiten" -Links auf deaktiviert ändern, also kam ich auf etwas wie das folgende
Geschachtelte serverseitige Blöcke in ASP.NET MVC?
<a href="/Products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])-1)%>/"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 1 ? "bgn disabled" : ""%>">
previous 10 products
</a>
Das funktionierte gut, noch ist es ein Problem. Obwohl die Verknüpfung deaktiviert oder speziell grau dargestellt ist, verweist sie immer noch auf eine gültige URL. Daher habe ich versucht, das href-Attribut der Verknüpfung basierend auf der CurrentPage-Variable zu ändern. Hier ist, wie der Code aussieht (bereiten Sie sich auf die reine Hässlichkeit):
<a href="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"javascript:void[]" :
"/products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])+1)%>/" %>"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"bgn disabled" :
""%>">
previous 10 products
</a>
Nun, meine Probleme mit diesem Code sind:
- Die zweite Anweisung nicht funktioniert, offenbar weil der verschachtelten Server-Seite Skripte
- Es ist sehr hässlich, und absolut unlesbar (stellen Sie sich vor, ich mache das mit jeder Seite, die Paging erfordert! Schmerzen in der aber). ? :(
besser Alternativen Jungs
Nun, immer Rot des ternären Operator mir sehr geholfen. Es sieht jetzt besser aus, aber gibt es keinen anderen Ansatz, um dies noch mehr zu überdenken? – Galilyou
Neben der Kapselung in einer Steuerungs- oder Masterseite empfehle ich, ein stark typisiertes Modell zu verwenden, anstatt "ViewData" direkt zu verwenden. Abgesehen davon können Sie auch Ihren eigenen HTML-Helfer erstellen, wenn das sinnvoll ist. –