.NET MVC: Wie implementiere ich unterschiedliche Seitenauftritte pro Benutzer?

Mir gehen hier die Ideen aus. Vielleicht kannst du mir raten, welches Muster oder welche Methode (n) ich verwenden soll.

Der Benutzer sollte sich anmelden und das ändern könnennur Aussehen für sein / ihr Profil. Der Unterschied (AFAIK) zur Personalisierung besteht darin, dass personalisierte Layouts nur für den Herausgeber (selbst) sichtbar sind. Ich denke, der Unterschied zwischen Skins ist, dass Skins vordefiniert sind, aber Benutzer die Einstellungen selbst ändern können sollten.

Ich muss in der Lage sein, das angepasste Layout jedem anzuzeigen, der die Seite des Autors besucht.

Die gute Lösung wäre, die Layout-Informationen in einer DB-Tabelle zu speichern. Außerdem sollte es zwischengespeichert werden, um die Datenbank zu entlasten und in CSS zu verwenden.

Vielen Dank

Bearbeiten:

OK, ich habe jetzt Nachforschungen angestellt. Kam mit dieser Art von Idee auf.

In einer Ansicht eine Benutzer-ID (Guid-Typ) aus einer Datenbank abrufen und auf ViewData festlegen: ViewData ["Benutzer-ID"] = profile.userId;

Diese Ansicht verwendet die folgende Masterseite mit dem Namen "Profile.Master" und verweist auf die dynamische CSS-Datei:

    <link href="<%= Url.Action("Style", "Profile", 
        ViewData["userId"]) %>" rel="stylesheet" type="text/css" />
</head>

Holen Sie sich im ProfileController die CSS-Daten aus der DB und geben Sie sie in die dynamische CSS-Ansicht zurück:

public ActionResult Style(Guid userId)
{
    var styles = (from s in Db.UserStyleSet.OfType<UserStyle>()
                  where s.aspnet_Users.UserId == userId
                  select s);

    return View("Style", styles);
}

Das Problem ist, dass die UserId niemals an den dynamischen CSS-Link übergeben wird:

Das Parameterwörterbuch enthält einen Null-Eintrag für den Parameter 'userId' des nicht nullwertfähigen Typs 'System.Guid' für die Methode 'System.Web.Mvc.ActionResult Style (System.Guid)' in 'Project.Controllers.ProfileController'.

Jeder Rat ist willkommen, danke.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage