2011-11-07 25 views
5

Tôi đã chuyển sang ứng dụng web từ trang web để cải thiện nó, tôi có hồ sơ trong trang web của mình.Cách tôi có thể sử dụng hồ sơ trong ứng dụng web

Tiểu sử của tôi không hoạt động, vì vậy tôi triển khai System.Web.ProfileProvider và tạo một lớp ProfileCommon kế thừa ProfileBase Tôi sử dụng HttpContext.Current.Profile.SetPropertyValue và GetPropertyValue. nó hoạt động nhưng vấn đề là nó có một lỗi logic vì HttpContext.Current.Profile không gọi phương thức ProfileProvider của tôi Làm thế nào tôi có thể sửa lỗi này? hoặc có thể có triển khai nào khác cho hồ sơ trong ứng dụng web không?

public class ProfileCommon : ProfileBase 
{ 
    public string FirstName 
    { 
     get 
     { 
      return HttpContext.Current.Profile.GetPropertyValue("FirstName").ToString(); 
     } 
     set 
     { 
      HttpContext.Current.Profile.SetPropertyValue("FirstName", value); 
     } 
    } 
} 

trong web.config

<profile inherits="BaniBookWebApp.Code.Core.ProfileCommon"> 
    <providers> 
    <add name="CustomProfileProvider" type="BaniBookWebApp.Code.Core.CustomProfileProvider"/> 
    </providers>  
</profile> 

CustomProfileProvider:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using eLearn2Model; 
using System.Collections; 
using System.Configuration; 

namespace AccessControl 
{ 
    public class ProfileProvider : System.Web.Profile.ProfileProvider 
    { 
     public ProfileProvider() 
     { 
     } 

     public override int DeleteInactiveProfiles(System.Web.Profile.ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate) 
     { 
      int res = -1; 
      using (var db = new eLearn2Entities()) 
      { 
       List<Profile> profiles = (from m in db.Profiles 
               where (m.LastUpdatedDate.CompareTo(userInactiveSinceDate) < 0) 
               select m).ToList(); 
       foreach (Profile profile in profiles) 
       { 
        if (profile != null) 
        { 
         db.Profiles.DeleteObject(profile); 
         res = db.SaveChanges(); 
        } 
       } 
      } 
      return res; 
     } 

     public override int DeleteProfiles(string[] usernames) 
     { 
      int res = -1; 
      using (var db = new eLearn2Entities()) 
      { 
       foreach (string username in usernames) 
       { 
        Profile profile = (from m in db.Profiles 
               join n in db.Users on m.UserId equals n.UserId 
               where n.UserName == username 
               select m).SingleOrDefault(); 
        if (profile != null) 
        { 
         db.Profiles.DeleteObject(profile); 
         res = db.SaveChanges(); 
        } 
       } 
      } 
      return res; 
     } 

     public override int DeleteProfiles(System.Web.Profile.ProfileInfoCollection profiles) 
     { 
      throw new NotImplementedException(); 
     }  

     public override System.Configuration.SettingsPropertyValueCollection GetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection collection) 
     { 
      System.Configuration.SettingsPropertyValueCollection spvc = new System.Configuration.SettingsPropertyValueCollection(); 
      lock (collection.SyncRoot) 
      { 
       foreach (object item in collection) 
       { 
        SettingsProperty sp = (SettingsProperty)item; 
        SettingsPropertyValue spv = new SettingsPropertyValue(sp); 
        spvc.Add(spv); 
       } 
      } 
      return spvc; 
     } 

     public override void SetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyValueCollection collection) 
     { 
      string PropertyNames_ = string.Empty; 
      string PropertyValuesString_ = string.Empty; 
      string userID = string.Empty; 
      lock (collection.SyncRoot) 
      { 
       foreach (object item in collection) 
       { 
        SettingsPropertyValue spv = (SettingsPropertyValue)item; 
        if (spv.PropertyValue != null) 
        { 
         if (!string.IsNullOrEmpty(spv.PropertyValue.ToString())) 
         { 
          if (spv.Name.Equals("UserID")) 
          { 
           userID = spv.PropertyValue.ToString(); 
          } 
          else 
          { 
           PropertyNames_ += spv.Name + ";"; 
           PropertyValuesString_ += spv.PropertyValue.ToString() + ";"; 
          } 
         } 
        } 
       }//foreach    
      }//lock 

      try 
      { 
       using (var db = new eLearn2Entities()) 
       { 
        bool isAuthenticated = bool.Parse(context["IsAuthenticated"].ToString()); 

        Profile profile = new Profile() 
        { 
         UserId = Guid.Parse(userID),      
         PropertyValuesString = PropertyValuesString_, 
         PropertyNames = PropertyNames_, 
         LastUpdatedDate = DateTime.UtcNow 
        }; 
        db.Profiles.AddObject(profile); 
        db.SaveChanges(); 
       } 
      } 
      catch 
      { 
       using (var db = new eLearn2Entities()) 
       { 
        //bookmark gives me an error said multiple record 
        Guid myID = Guid.Parse(userID); 
        Profile existed_profile = db.Profiles.Where 
         (item => item.UserId == myID).SingleOrDefault() as Profile; 

        existed_profile.PropertyValuesString = PropertyValuesString_; 
        existed_profile.PropertyNames = PropertyNames_; 
        existed_profile.LastUpdatedDate = DateTime.UtcNow; 

        db.Profiles.ApplyOriginalValues(existed_profile); 
        db.SaveChanges(); 
       } 

      } 
     } 
    } 
} 
+0

Bạn có thể hiển thị triển khai nhà cung cấp hồ sơ tùy chỉnh của mình không? –

Trả lời

3

Bạn đã thử thêm enabled = "true" trên web.config?

<profile inherits="BaniBookWebApp.Code.Core.ProfileCommon" enabled="true"> 
Các vấn đề liên quan