我正在尝试将现有网站转换为 Web 应用程序项目,但在使配置文件正常工作时遇到了很大问题。
网站项目中的代码隐藏示例是
注册角色和profile.ascx.cs
// Add the newly created user to the default Role.
Roles.AddUserToRole(CreateUserWizard1.UserName, wsatDefaultRole);
// Create an empty Profile for the newly created user
ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
// Populate some Profile properties. Values are located in web.config file
p.Company.Company = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeName")).Text;
p.Company.Address = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeAddress")).Text;
p.Company.City = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeCity")).Text;
p.Company.State = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddlStates")).SelectedValue;
p.Company.PostalCode = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeZip")).Text;
p.Company.Phone = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbContactPhone")).Text;
p.Company.Fax = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbContactFax")).Text;
p.Preferences.Newsletter = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddlNewsletter")).SelectedValue;
// Save profile - must be done since we explicitly created it
p.Save();
网络配置
<profile defaultProvider="MyCMSTableProfileProvider" automaticSaveEnabled="false" enabled="true">
<providers>
<clear/>
<add name="MyCMSTableProfileProvider" applicationName="MyCMS" connectionStringName="dbMyCMSConnectionString" table="aspnet_CustomProfile" type="CustomProfile.SqlTableProfileProvider"/>
<add name="MyCMSStoredProcedureProfileProvider" applicationName="MyCMS" connectionStringName="dbMyCMSConnectionString" type="CustomProfile.SqlStoredProcedureProfileProvider" setProcedure="sp_wsat_SetCustomProfileData" readProcedure="sp_wsat_GetCustomProfileData"/>
</providers>
<properties>
<group name="Personal">
<add name="FirstName" type="String" defaultValue="[null]" customProviderData="FirstName;nvarchar"/>
<add name="LastName" type="String" defaultValue="[null]" customProviderData="LastName;nvarchar"/>
<add name="Gender" type="String" defaultValue="[null]" customProviderData="Gender;nvarchar"/>
<add name="BirthDate" type="DateTime" defaultValue="[null]" customProviderData="BirthDate;datetime"/>
<add name="Occupation" type="String" defaultValue="[null]" customProviderData="Occupation;nvarchar"/>
<add name="Website" type="String" defaultValue="[null]" customProviderData="PersonalWebsite;nvarchar"/>
</group>
<group name="Address">
<add name="Country" type="String" defaultValue="[null]" customProviderData="Country;nvarchar"/>
<add name="Address" type="String" defaultValue="[null]" customProviderData="Address;nvarchar"/>
<add name="AptNumber" type="String" defaultValue="[null]" customProviderData="AptNumber;nvarchar"/>
<add name="City" type="String" defaultValue="[null]" customProviderData="City;nvarchar"/>
<add name="State" type="String" defaultValue="[null]" customProviderData="State;nvarchar"/>
<add name="PostalCode" type="String" defaultValue="[null]" customProviderData="PostalCode;nvarchar"/>
</group>
<group name="Contacts">
<add name="DayPhone" type="String" defaultValue="[null]" customProviderData="DayPhone;nvarchar"/>
<add name="DayPhoneExt" type="String" defaultValue="[null]" customProviderData="DayPhoneExt;nvarchar"/>
<add name="EveningPhone" type="String" defaultValue="[null]" customProviderData="EveningPhone;nvarchar"/>
<add name="EveningPhoneExt" type="String" defaultValue="[null]" customProviderData="EveningPhoneExt;nvarchar"/>
<add name="CellPhone" type="String" defaultValue="[null]" customProviderData="CellPhone;nvarchar"/>
<add name="Fax" type="String" defaultValue="[null]" customProviderData="Fax;nvarchar"/>
</group>
<group name="Company">
<add name="Company" type="String" defaultValue="[null]" customProviderData="Company;nvarchar"/>
<add name="Address" type="String" defaultValue="[null]" customProviderData="Address2;nvarchar"/>
<add name="City" type="String" defaultValue="[null]" customProviderData="City2;nvarchar"/>
<add name="State" type="String" defaultValue="[null]" customProviderData="State2;nvarchar"/>
<add name="PostalCode" type="String" defaultValue="[null]" customProviderData="PostalCode2;nvarchar"/>
<add name="Phone" type="String" defaultValue="[null]" customProviderData="Phone2;nvarchar"/>
<add name="Fax" type="String" defaultValue="[null]" customProviderData="Fax2;nvarchar"/>
<add name="Website" type="String" defaultValue="[null]" customProviderData="Website2;nvarchar"/>
</group>
<group name="Preferences">
<add name="Culture" type="String" defaultValue="en-US" customProviderData="Culture;nvarchar"/>
<add name="Newsletter" type="String" defaultValue="[null]" customProviderData="Newsletter;nvarchar"/>
</group>
</properties>
</profile>
但这给出了错误The type or namespace name 'ProfileCommon' could not be found (are you missing a using directive or an assembly reference?)
使用这个例子,我创建了 2 个新类
配置文件信息.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace myWSAT.controls
{
[Serializable]
public class Personal
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public DateTime BirthDate { get; set; }
public string Occupation { get; set; }
public string Website { get; set; }
}
[Serializable]
public class Address
{
public string Country { get; set; }
public string Address1 { get; set; }
public string AptNumber { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
}
[Serializable]
public class Contacts
{
public string DayPhone { get; set; }
public string DayPhoneExt { get; set; }
public string EveningPhone { get; set; }
public string EveningPhoneExt { get; set; }
public string CellPhone { get; set; }
public string Fax { get; set; }
}
[Serializable]
public class Company
{
public string CompanyName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string Website { get; set; }
}
[Serializable]
public class Preferences
{
public string Culture { get; set; }
public string Newsletter { get; set; }
}
[Serializable]
public class ProfileInfo
{
public Personal Personal { get; set; }
public Address Address { get; set; }
public Contacts Contacts { get; set; }
public Company Company { get; set; }
public Preferences Preferences { get; set; }
}
}
wProfile.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Profile;
namespace myWSAT.controls
{
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);
}
}
}
然后将 register-with-role-and-profile.ascx.cs修改为
// add newly created user to default Role specified above
if (Roles.RoleExists(wsatDefaultRole))
{
// Add the newly created user to the default Role.
Roles.AddUserToRole(CreateUserWizard1.UserName, wsatDefaultRole);
// Create an empty Profile for the newly created user
wProfile p = wProfile.GetProfile(Membership.GetUser().UserName);
//ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
// Populate some Profile properties. Values are located in web.config file
p.ProfileInfo.Company.CompanyName = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeName")).Text;
p.ProfileInfo.Company.Address = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeAddress")).Text;
p.ProfileInfo.Company.City = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeCity")).Text;
p.ProfileInfo.Company.State = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddlStates")).SelectedValue;
p.ProfileInfo.Company.PostalCode = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbOfficeZip")).Text;
p.ProfileInfo.Company.Phone = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbContactPhone")).Text;
p.ProfileInfo.Company.Fax = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txbContactFax")).Text;
p.ProfileInfo.Preferences.Newsletter = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddlNewsletter")).SelectedValue;
// Save profile - must be done since we explicitly created it
p.Save();
}
此构建和运行正常,但以下行始终返回 null。
wProfile p = wProfile.GetProfile(Membership.GetUser().UserName);
我不确定有什么问题?我也试过这个链接底部的例子没有成功
编辑:
我已经阅读了很多链接并尝试了几种解决方案,但我的专长是这个领域并不是很好。我想我正在寻求一些语法帮助以使其运行,一旦可以,我会提供赏金。
编辑:如果我附上我尝试将其转换为 WAP 的当前状态,它可能会有所帮助。 http://www.mediafire.com/?ouabeoxwu75b52c