Laden...

Kategorien und Verwendung von Routing

Erstellt von Pador vor 10 Jahren Letzter Beitrag vor 10 Jahren 619 Views
P
Pador Themenstarter:in
8 Beiträge seit 2013
vor 10 Jahren
Kategorien und Verwendung von Routing

Hallo 😃,

ich habe leider nichts passendes gefunden oder ich verstehe es einfach nicht, deswegen möchte ich hier einmal speziell auf mein Problem eingehen:

Für mein ASP.NET MVC4 Projekt muss es eine Möglichkeit geben (wie bei fast allen Seiten), bestimmte Produkte, bestimmten Kategorien zuordnen zu können.

Ein Beispiel:

Buch -> EDV -> Anfänger: ASP.NET für dummies

Games -> PlayStation 3 -> Action: Doom 3
Games -> XBOX 360 -> Action: Half Life 2

Jetzt habe ich, z.B. bei Action das Problem, dass diese Kategorie zwei Eltern-Kategorien haben kann. Deshalb habe ich mir folgende Tabellen in der SQL-Datenbank gedacht:

Categories
ID | Name | Description

CategorieTree
ID | ParentCategory | SubCategory

also eine n:m Verknüpfung. Somit kann jede Kategorie mehrere Elternkategorien besitzen.

Ist mein Schema der gängige Weg zum Anlegen der Kategorien oder habt ihr bessere Möglichkeiten?

Zusätzlich frage ich mich dann, wie man Kategorien in meinem Fall am besten mit dem Routing abbilden kann. Im Prinzip müssen doch alle Kategorien fest in der RegisterRoutes() Methode vorgegeben werden oder nicht?

Hilfe wäre Klasse, ich habe schon Kopfschmerzen vom vielen hin und her 😉

Beste Grüße

16.807 Beiträge seit 2008
vor 10 Jahren

Nein, Routes müssen nicht fest vergeben werden. Du musst nur das Schema definieren. Routes werden in der MSDN gut erklärt. Dann solltest Du das Prinzip gut verstehen (auch im Zusammenhang mit Areas, Controllern und Actions).

Ob Du nun Games -> PS3 -> Name oder PS3 -> Games -> Name als Schema nutzt; das musst Du wissen - beides möglich und sinnvoll.
Bei einer n:m-Verknüpfung gibt es aber eigentlich kein anderen sinnvollen weg als über eine Hilfstabelle - das ist normal (jedenfalls bei relationalen Datenbanken).

P
Pador Themenstarter:in
8 Beiträge seit 2013
vor 10 Jahren

Vielen Dank für deine Antwort!

Bei vielen Seiten sehe ich halt immer nur, dass ähnlicher Link verwendet wird:

http://localhost/games/xbox-360/action/doom3-3242

Klar, bei dem Produkt selbst steht eine ID hinter, die ich zur Abfrage verwenden kann. Wie aber funktioniert das für die Kategorien? Fragt man hier wirklich dann den String-Wert ab?

16.807 Beiträge seit 2008
vor 10 Jahren

Ja

Ein Hinweis noch: die meisten Bücher behandelt ASP.NET WebForms und nicht ASP.NET MVC - das sind zwei paar Stiefel.

S
902 Beiträge seit 2007
vor 10 Jahren

Hi,

wenn das Schema immer gleich bleibt, kannst du theoretisch eine Route definieren, z.B:


routes.MapRoute(
    "kategorieRoute", // Route name
    "{controller}/{maincategory}/{subcategory}/{subcategory2}", // URL mit parameter
    new { controller = "Games", action = "Find", maincategory= "all", subcategory = "action", subcategory2 = UrlParameter.Optional } 
);

Damit hast du dann einen Controller Games, mit der Methode Find, und diese würde die Kategorien dann als Parameter bekommen.

Wichtig ist hierbei natürlich die reihenfolge der routen, wenn du mehrere hast.

Beispielurl wäre dann:

Games/PS3/Action/Singleplayer --> alle Params
Games/PC/Sport --> Subcategory 2 bleibt leer
Games/XBOX/ --> Subcategory = action
Games/ --> maincategory = all, Subcategory = action

mfg
serial