2009-06-03 6 views
0

Dans mon projet asp.net mvc actuel, un utilisateur doit pouvoir se connecter. Une fois connecté, un ensemble de préférences peut éventuellement être défini. Certaines de ces préférences sont générales (par exemple, la langue de site préférée, etc.), mais certaines sont spécifiques à ce projet uniquement (filtrage de requête prédéfini, etc.).Comment créer un attribut de préférence utilisateur?

Étant donné que ces préférences sont présentes dans beaucoup de différents endroits de mon site, je définirais cela comme une préoccupation croisée. De préférence j'aurais un attribut gérer cela plutôt que chaque action sur son propre.

Comment puis-je concevoir un attribut suffisamment générique pour être réutilisé dans de futurs projets mais qui en sait assez sur le projet actuel pour utiliser tous les paramètres spécifiques au projet?

--EDIT--
et le réglage des Obtenir préférences ne sont pas le problème. J'ai connecté une classe UserSettings au fournisseur de profil asp.net. Mon problème est de savoir comment tirer cette préoccupation croisée de mes contrôleurs dans un attribut.

Répondre

0

indépendamment si vous stockez les préférences dans un fichier texte, xml ou base de données, ne serait pas plus facile de créer une classe (par exemple Utility.UserPreferences) qui va charger ces préférences de l'utilisateur et les stocker dans une session variable, en utilisant un ENUM les appeler pour récupérer/mettre à jour

namespace Utility 
{ 
    public class UserPreferences 
    { 
     public UserPreferences(int userID) 
     { 
      // Load Preferences from text file, xml file or DB 
      string loadedPreferences = "us|20|yes|no"; 

      HttpContext.Current.Session["userPreferences"] = loadedPreferences; 
     } 

     public void Savepreferences(string[] pref, int userID) 
     { 
      // Save preferences for that user 
     } 

     public static string GetPreferences(PreferencesType type) 
     { 
      string[] pref = HttpContext.Current.Session["userPreferences"].ToString().Split('|'); 

      switch (type) 
      { 
       case PreferencesType.Language: return pref[0]; 
       case PreferencesType.ShowHowManyResults: return pref[1]; 
       case PreferencesType.ShowNavigation: return pref[2]; 
       case PreferencesType.GetEmailAlerts: return pref[3]; 
      } 
     } 

     public enum PreferencesType 
     { 
      Language, ShowHowManyResults, ShowNavigation, GetEmailAlerts 
     } 
    } 
} 

puis ...

// Login sucessfully... 
Utility.UserPreferences pref = new Utility.UserPreferences(CurrentUser.ID); 


// to retrieve a preference 
string language = Utility.UserPreferences.GetPreferences(
         Utility.UserPreferences.PreferencesType.Language, 
         CurrentUser.ID); 

c'est juste une idée ... comme je le ferais ... c'est simple et il est projet (s) large, parce que vous avez juste besoin de changer la classe pour contenir plus de préférences ...

+0

Obtenir et régler les préférences n'est pas un problème. J'ai connecté une classe UserSettings au fournisseur de profil asp.net. Le problème est, comment puis-je tirer cette préoccupation croisée de mes contrôleurs dans un attribut. –

0

Pour les préférences utilisateur, vous devez utiliser le framework ASP.NET Provider Provider. Certaines ressources:

Vous pouvez construire préférences de l'utilisateur basée sur les attributs de traitement au-dessus du cadre de fournisseur de profil, mais J'imagine que ce genre de chose serait spécifique à votre application.

+0

J'utilise les fournisseurs de profils pour l'authentification. Pour les préférences, j'ai connecté ma propre classe. Mais d'où viennent ces préférences n'a pas vraiment d'importance. Ce qui compte, c'est comment je travaille avec cette information. –

Questions connexes