对于我的生活,我无法让SqlProfileProvider在我正在进行的MVC项目中工作.
我意识到的第一个有趣的事情是Visual Studio不会自动为您生成ProfileCommon代理类.这不是什么大问题,因为扩展ProfileBase类只是简单的事情.在创建了ProfileCommon类之后,我编写了以下用于创建用户配置文件的Action方法.
[AcceptVerbs("POST")] public ActionResult CreateProfile(string company, string phone, string fax, string city, string state, string zip) { MembershipUser user = Membership.GetUser(); ProfileCommon profile = ProfileCommon.Create(user.UserName, user.IsApproved) as ProfileCommon; profile.Company = company; profile.Phone = phone; profile.Fax = fax; profile.City = city; profile.State = state; profile.Zip = zip; profile.Save(); return RedirectToAction("Index", "Account"); }
我遇到的问题是对ProfileCommon.Create()的调用无法转换为类型ProfileCommon,因此我无法取回我的配置文件对象,这显然导致下一行失败,因为配置文件为空.
以下是我的web.config的片段:
MembershipProvider正在顺利工作,所以我知道连接字符串是好的.
为了防止它有用,这是我的ProfileCommon类:
public class ProfileCommon : ProfileBase { public virtual string Company { get { return ((string)(this.GetPropertyValue("Company"))); } set { this.SetPropertyValue("Company", value); } } public virtual string Phone { get { return ((string)(this.GetPropertyValue("Phone"))); } set { this.SetPropertyValue("Phone", value); } } public virtual string Fax { get { return ((string)(this.GetPropertyValue("Fax"))); } set { this.SetPropertyValue("Fax", value); } } public virtual string City { get { return ((string)(this.GetPropertyValue("City"))); } set { this.SetPropertyValue("City", value); } } public virtual string State { get { return ((string)(this.GetPropertyValue("State"))); } set { this.SetPropertyValue("State", value); } } public virtual string Zip { get { return ((string)(this.GetPropertyValue("Zip"))); } set { this.SetPropertyValue("Zip", value); } } public virtual ProfileCommon GetProfile(string username) { return ((ProfileCommon)(ProfileBase.Create(username))); } }
关于我可能做错什么的任何想法?你有没有其他人成功地将ProfileProvider与你的ASP.NET MVC项目集成在一起?
先感谢您...
这是你需要做的:
1)在Web.config的部分中,除了您的其他属性设置外,还要添加"inherits"属性:
public virtual ProfileCommon GetProfile(string username) { return Create(username) as ProfileCommon; }
希望这可以帮助.
不确定整个问题,但我在你的代码中注意到一件事:
ProfileCommon profile = (ProfileCommon)ProfileCommon.Create(user.UserName, user.IsApproved) as ProfileCommon;
您不需要(ProfileCommon)和ProfileCommon.它们都进行强制转换,但是()抛出和异常,而as如果无法进行强制转换则返回null.
试用Web Profile Builder.它是一个构建脚本,可以从web.config自动生成WebProfile类(相当于ProfileCommon).