Wir verwenden ein benutzerfreundliches URL-Routenschema. Grundsätzlich kann eine Kombination aus Principal Identity und einem freundlichen Namen verwendet werden, die intern auf eine Identität abgebildet werden kann (Person ID). So eine Route wie folgt aus:Bereitstellung einer ID für viele Teilansichten aus einer übergeordneten Ansicht, ohne dass die sensiblen IDs offengelegt werden
routes.MapRoute(string.Empty, "{friendlyname}/Products/{action}", new {controller = "Products", action = "List"});
wie diese zu einer URL Karte Würde:
Adam/Products/List
Das alles funktioniert gut und abstrahiert die interne ID der benannten Person entfernt, die auch benötigt wird.
Das Problem ist, unsere Ansichten bestehen aus vielen Teilansichten. Wenn sie mit der Methode @ Html.Action gerendert werden, benötigen sie letztendlich die PersonID, aber von der URL haben wir nur den 'Anzeigenamen'.
Ich habe für eine Weile darüber nachgedacht und es gibt zwei Lösungen meiner Meinung nach:
Übergeben Sie den ‚freundlichen Namen‘ in jedem der Controller-Aktion Methoden, die die Teilansichten und intern die Methode zurückgeben muss einen Blick auf die aktuell angemeldete Identität und den angezeigten Namen werfen. Dies wird mir die PersonID geben und ich kann dann effizient abfragen. Das einzige Problem bei dieser Vorgehensweise besteht darin, dass ich aufgrund der verschiedenen Teilansichten den aktuell angemeldeten Identitäts- und Anzeigenamen für jeden Teilansichtsaufruf abfragen werde, der innefficeint ist, und ich denke, ich sollte diesen Code nur einmal schreiben müssen.
Irgendwie Abfrage in der Ansicht und erhalten die PersonID, so dass es auf jeden @ Html.Action Aufruf übergeben werden kann, so dass die partiellen View-Controller-Methoden müssen nicht selbst suchen Runden Rundreisen in die Datenbank für die gemeinsame zu speichern information. Das Problem dabei ist, dass ich mir nicht sicher bin, wie ich das sauber machen kann, wenn ich die DI verwende, die wir für den Rest der Anwendung verwenden.
Alle Gedanken zur Annäherung an würde sehr geschätzt werden.
Danke,
Adam
Hallo Marc. Danke für Ihre Antwort. Ich habe es gerade mit dem Modell herausgefunden. Ich werde die Antwort jetzt posten. – Adam
Ok, anscheinend kann ich nicht für weitere 8 Stunden antworten. Ich werde aktualisieren, wenn ich darf. – Adam
Ich werde meine Antwort mit dem aktualisieren, von dem ich annehme, dass Sie es tun werden, aber mit ein paar Fallen bemerkt. –