gpt4 book ai didi

asp.net-mvc - 在 ASP.NET MVC 中实现配置文件提供程序

转载 作者:行者123 更新时间:2023-12-03 05:37:37 26 4
gpt4 key购买 nike

在我的一生中,我无法让 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 的片段:

<profile defaultProvider="AspNetSqlProfileProvider" automaticSaveEnabled="false" enabled="true">
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
<properties>
<add name="FirstName" type="string" />
<add name="LastName" type="string" />
<add name="Company" type="string" />
<add name="Phone" type="string" />
<add name="Fax" type="string" />
<add name="City" type="string" />
<add name="State" type="string" />
<add name="Zip" type="string" />
<add name="Email" type="string" >
</properties>
</profile>

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”属性:

<profile inherits="MySite.Models.ProfileCommon" defaultProvider="....

2) 删除整个 <properties>来自 Web.config 的部分,因为您已经在自定义 ProfileCommon 类中定义了它们,并且还指示在上一步中从自定义类继承

3) 将 ProfileCommon.GetProfile() 方法的代码更改为

public virtual ProfileCommon GetProfile(string username)        
{
return Create(username) as ProfileCommon;
}

希望这有帮助。

关于asp.net-mvc - 在 ASP.NET MVC 中实现配置文件提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/79129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com