Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
211 views
in Technique[技术] by (71.8m points)

c# - Web Application Project - how to use ProfileCommon

I am porting a site I had developed on an old box across to a new dev env. I have not just copied all the files as I didn't have a great file structure and some parts of the code needed to be removed as I went along.

Originally I had created a website (File -> New -> Web Site). I wanted a file structure something like:

Popular folder structure for build

So I created a new blank solution so the sln file was on its own, then added projects (various DLL projects) and am ASP.NET Web Application.

This last part seems to have caused me a few issues, I am now getting the following error:

"The type or namespace name ' ProfileCommon' could not be found".

I found the following page:

http://weblogs.asp.net/joewrobel/archive/2008/02/03/web-profile-builder-for-web-application-projects.aspx

It seems a bit long winded and I was hoping someone might know of a better solution.

I am trying to use the ProfileCommon with the CreateUser Wizard as I add a little extra information into it.

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
    // Create an empty Profile for the newly created user
    ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);

    // Populate some Profile properties off of the create user wizard
    p.CurrentLevel = Int32.Parse(((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("clevel")).SelectedValue);

    // Save profile - must be done since we explicitly created it
    p.Save();
}

Web.config:

<profile enabled="true">
<properties>
    <add name="CurrentLevel" type="Int32"/>
</properties>
</profile>

If there is another way to add this extra information into the creation wizard, or just a better way of setting extra info to a new user then I am all ears and would be very grateful.

Thanks for the help and advice.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

This is a very late post, but I just ran into this same problem when porting a VB.NET Visual Studio 2008 (.NET 3.5) website over to C# Visual Studio 2010 (.NET 4.0) website.

I found references to ProfileCommon in MSDN's ProfileBase documentation, but nothing on how to get that object.

From your helpful MSDN link, I noticed that ProfileCommon would only ever be just a wrapper for the HttpContext.

In short, I used the var keyword to extract the ProfileCommon information from the HttpContext, as in:

var profile = HttpContext.Current.Profile;

Using this one bit of information, I was able to create the entire class for reading and writing the information for my website visitors.

Like you, I hope this code might help someone else:

using System.Web;
using System.Web.Security;

namespace WebApplication17 {

  public partial class ManageProfile : System.Web.UI.Page {

    protected void Page_Load(object sender, EventArgs e) {
      if (!IsPostBack) {
        if (User.Identity.IsAuthenticated) {
          loadProfile();
        } else {
          goHome();
        }
      }
    }

    private void changePassword(string pwdOld, string pwdNew) {
      MembershipUser user = Membership.GetUser(User.Identity.Name);
      user.ChangePassword(pwdOld, pwdNew);
      Membership.UpdateUser(user);
    }

    private void goHome() {
      Server.Transfer("Default.aspx");
    }

    private void loadProfile() {
      MembershipUser user = Membership.GetUser(User.Identity.Name);
      txtEmail.Text = user.Email;
      TextBox3.Text = user.GetPassword();
      var profile = HttpContext.Current.Profile;
      txtTitle.Text = profile.GetPropertyValue("Title").ToString();
      txtName.Text = profile.GetPropertyValue("Name").ToString();
      txtAddress.Text = profile.GetPropertyValue("Address").ToString();
      txtCity.Text = profile.GetPropertyValue("City").ToString();
      txtSt.Text = profile.GetPropertyValue("St").ToString();
      txtZip.Text = profile.GetPropertyValue("Zip").ToString();
      txtPhone.Text = profile.GetPropertyValue("Phone").ToString();
      txtFax.Text = profile.GetPropertyValue("Fax").ToString();
      txtCompany.Text = profile.GetPropertyValue("Company").ToString();
    }

    private void setProfile() {
      MembershipUser user = Membership.GetUser(User.Identity.Name);
      user.Email = txtEmail.Text;
      Membership.UpdateUser(user);
      var profile = HttpContext.Current.Profile;
      profile.SetPropertyValue("Title", txtTitle.Text);
      profile.SetPropertyValue("Name", txtName.Text);
      profile.SetPropertyValue("Address", txtAddress.Text);
      profile.SetPropertyValue("City", txtCity.Text);
      profile.SetPropertyValue("St", txtSt.Text);
      profile.SetPropertyValue("Zip", txtZip.Text);
      profile.SetPropertyValue("Phone", txtPhone.Text);
      profile.SetPropertyValue("Fax", txtFax.Text);
      profile.SetPropertyValue("Company", txtCompany.Text);
      profile.Save();
    }

    protected void Button6_Click(object sender, EventArgs e) {
      changePassword(TextBox3.Text, TextBox4.Text);
      goHome();
    }

    protected void Button11_Click(object sender, EventArgs e) {
      setProfile();
      goHome();
    }

  }

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...