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();
}
}
}
}
}
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? –