2011-11-07 25 views
5

Przeniosłem się do aplikacji internetowej ze strony internetowej, aby ją poprawić, mam profil na mojej stronie internetowej.Jak mogę używać profilu w aplikacji internetowej

Mój profil nie działał, więc zaimplementowałem System.Web.ProfileProvider i utworzyłem klasę dziedziczącą profil ProfileCommon. Używam HttpContext.Current.Profile.SetPropertyValue i GetPropertyValue. działa, ale problem polega na tym, że ma on logiczny błąd, ponieważ HttpContext.Current.Profile nie wywołuje mojej metody ProfileProvider. Jak mogę to naprawić? A może jest jakaś inna implementacja profilu w aplikacji internetowej?

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

w 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

Czy możesz pokazać swoją implementację niestandardowego dostawcy profilu? –

Odpowiedz

3

próbowałeś dodanie enabled = "true" w pliku web.config?

<profile inherits="BaniBookWebApp.Code.Core.ProfileCommon" enabled="true"> 
Powiązane problemy