2009-03-10 9 views
1

Was ist die korrekte Methode zum dynamischen Ändern der Ansicht (die Ansicht aspx), die eine Controller-Methode im Vergleich zur Standardnamenskonvention verwendet.ASP.NET MVC - Umschalten der zu verwendenden Variablen dynamisch

Ich vermute, es hat etwas mit ViewResult und ViewName zu tun, aber was ist die richtige Syntax?

Update:
Eine Sache habe ich vergessen ... Gibt es eine Möglichkeit, dies die „action“ oder Methodennamen, ohne dass nicht ein Teil der resultierenden URL sein?

Zum Beispiel
Wenn ich eine Liste aller Staaten in den USA haben wollte.
http://localhost/list/states
(zeigt eine einfache Liste von Zustandsnamen)

Und wenn ich eine Liste der 50 größten Städte in den USA haben wollte.
http://localhost/list/largest-cities
(zeigt die Stadt und die Bevölkerung - zwei Stützenraster)

Also ich mag in der Lage sein, in verschiedenen „Formatierer“ je nach dem Listennamen zu ziehen.

Soll ich das in einer einzigen Aktion/mehreren Ansichten tun?
Kann ich Routen verwenden, um den Namen der Ansicht in der URL zu verbergen?
Was ist der beste Weg, um dies zu nähern?

+0

Ich denke, separate Ansichten dynamisch für eine bestimmte URL angezeigt ist eine schlechte Idee, hat nur einen schlechten Code Geruch. –

+0

Tschad, siehe Kommentar unten zu Tvanfosson. – BuddyJoe

+0

Wenn es überhaupt hilft, arbeite ich an etwas, das nur mit Listen arbeitet ... so ähnlich wie eine Google Base - http://base.google.com – BuddyJoe

Antwort

1

einfach die Methode verwenden, Das nimmt den Namen der zu wählenden Ansicht an. Sei aber vorsichtig. Das meiste, was Sie wahrscheinlich tun möchten, ist, stattdessen zu einer anderen Aktion umzuleiten. Wenn Sie eine andere Ansicht zurückgeben, ändert sich die URL nicht wie bei der Weiterleitung.

string name = ...figure out which view you want... 

return View(name); 
+0

Also was sagst du, ist ich viel Umleitung durch den Index, ohne die URL zu ändern? Das ist, was ich in diesem Fall will. – BuddyJoe

+0

Dies ist möglicherweise das, was Sie wollen, aber normalerweise gebe ich nur eine andere Ansicht zurück, wenn ein Fehler auftritt, der eine freigegebene Fehleransicht oder ein Validierungsproblem zurückgibt, das die Ansicht zurückgibt, von der die Aktion aufgerufen wurde. Ich bevorzuge es, meine URLs RESTful zu halten und die View nicht kontextabhängig zu machen. – tvanfosson

+0

+1 und Antwort. Gute Denkanstöße. Ich werde versuchen, eine Ansicht zu behalten und irgendwie einen "Formatierer" für die Grid/Tabelle einzufügen, die ich auf jeder Seite verwenden werde. – BuddyJoe

0

Wenn Sie dynamisch eine andere Ansicht von einer Controller-Aktion rendern müssen, können Sie einfach einen Wert an die base.View() -Methode (oder den ViewResult-Konstruktor) übergeben. Die Lage der Ansicht wird immer (für die Web-Formulare Motor sehen können):

/Views/{Controller}/{View}.aspx 

Edit: (Dank iþi) Es könnte auch sein, in:

/Views/Shared/{View}.aspx 
+0

Technisch könnte es auch aus dem freigegebenen Ordner kommen. (Nebenbei: In früheren Projekten habe ich meine eigene Viewengine geschrieben, weil ich mit dem "forced folder" Verhalten unzufrieden war.) – Joel

+0

Sucht es zuerst in Shared? oder unter dem Controller-Namen zuerst? – BuddyJoe

+0

Controller-Name, dann freigegeben –

Verwandte Themen