我应该如何创建用户偏好属性?

问题描述:

在我目前的asp.net mvc项目中,用户应该可以登录。登录时可以选择设置一组首选项。其中一些偏好是一般性的(例如,喜欢的网站语言等),但是一些只针对该项目(预定义的查询过滤等)。我应该如何创建用户偏好属性?

由于这些喜好存在于我的网站的很多不同的地方,我会将其定义为交叉关注。最好我会有一个属性来处理它,而不是它自己的每个动作。

我该如何设计出足够通用的属性,以便在未来的项目中重复使用,但是对当前项目也足够了解,以便使用所有项目特定设置?

- EDIT--
获取和设置首选项不是问题。我将一个UserSettings类连接到了asp.net配置文件提供程序。 我的问题是如何将这个交叉担忧从我的控制器中拉成属性。

如果您将该首选项存储在文本文件xml或数据库中,创建一个类(例如Utility.UserPreferences)并不会更容易,该类将从用户加载这些首选项并将它们存储在Session中变量,然后使用枚举叫他们来检索/更新

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 
     } 
    } 
} 

然后...

// 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); 

这只是一个想法......我会做的方式......它很简单,它是项目范围广泛,因为你只需要改变课程以容纳更多的偏好...

+0

获取和设置首选项不是问题。我将一个UserSettings类连接到了asp.net配置文件提供程序。 问题是,我怎样才能将这个交叉关系从我的控制器中拉出来成为一个属性。 – 2009-06-03 08:45:02

对于用户首选项,您应该使用ASP.NET Profile Provider框架。一些资源:

你可以建立基于属性的用户喜好操控性上的个人资料提供框架之上,但我想象那种事情会针对你的应用程序。

+0

我正在使用配置文件提供程序进行身份验证。对于喜好,我连接了我自己的班级。但是,这些偏好来自哪里并不重要。重要的是我如何处理这些信息。 – 2009-06-03 08:43:27