So, I decided to take advantage of the Profile feature of .NET to store some personal data per user. Shouldn't be a big deal right? After all, you just call the appropriate assembly and then, you should be able to invoke Profile.Save() and like magic the data is now in your ASP database on the Profiles table.
This is when I came across a huge set of posts and threads about how complex and confusing it can be to implement the Profile feature if you have a Web Application Project.
Among the confusing, credit should be due to
Lee Dumond and
Scott Gu as usual for posting some awesome examples in their blogs.
By following Lee's blog, below is my implementation of the same technique to be able to use Profiles in my Web Application Project. I thought it would be a good idea to post it, in order to give you a second example.
Step 1. Created a Class named ProfileInfo which exposes the properties that I want to save in my profile, in this case, let's work with two FirstName and Last Name
namespace Project1.Account
{
[Serializable]
public class ProfileInfo
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Step 2. Created a second Class named wProfile, this class is inherited from the ProfileBase class and will be used to expose the profile functionality on other pages in the site.
using System.Web;
using System.Web.Profile;
namespace Project1.Account
{
public class wProfile : ProfileBase
{
public ProfileInfo ProfileInfo
{
get { return (ProfileInfo) GetPropertyValue("ProfileInfo"); }
}
public static wProfile GetProfile()
{
return (wProfile) HttpContext.Current.Profile;
}
public static wProfile GetProfile(string userName)
{
return (wProfile) Create(userName);
}
}
}
Step 3. Modify your Web.config file to implement a SQLProfileProvider. Notice the "inherits" on the defaultProvider definition. Also noticed that the connection ApplicationServices was previously defined.
<profile defaultProvider="AspNetSqlProfileProvider" inherits="Project1.Account.wProfile">
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/wMyApp"/>
</providers>
</profile>
Step 4. Implementing the logic in my ASPX pages
protected void Page_Load(object sender, EventArgs e)
{
wProfile lProfile = wProfile.GetProfile(Membership.GetUser().UserName);
Label1.Text = "Welcome, " + lProfile.ProfileInfo.FirstName + " " + lProfile.ProfileInfo.LastName;
}
Happy Coding, Hope this helps,
Will
CodeProject