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
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).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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?
Ja
Ein Hinweis noch: die meisten Bücher behandelt ASP.NET WebForms und nicht ASP.NET MVC - das sind zwei paar Stiefel.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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