我想更改现有用户的个人资料,而不必为用户创建新的个人资料。例如:我有一个用户名Usr1
,我只想更改他的年龄,我该怎么做?
4 回答
当您在页面中时,您可以使用 ProfileCommon 类来访问配置文件。profilecommon 类是由 asp.net 在编译 Web 项目期间根据您的 web.config 配置文件设置自动生成的。
如果您想使用 app_code 文件夹中的配置文件,则必须使用 profilebase 类。页面中可用的 Profilecommon 也派生自此类。
Profilebase 可以像这样访问
HttpContext.Profile or HttpContext.Current.Profile
要读取配置文件值,您需要执行以下操作
HttpContext.Profile.GetPropertyValue("propertyName");
要将值写入配置文件,您需要编写
HttpContext.Profile.SetPropertyValue("propertyName", "propertyValue");
有关完整详细信息,请参阅本文。请注意,在某些情况下(请参阅我对另一个答案的评论),不会生成 ProfileCommon。
在这种情况下,您需要恢复使用 ProfileBase:
ProfileBase profile = context.Profile;
DateTime dob= profile.GetPropertyValue("dob") as DateTime;
...
profile.SetPropertyValue("dob",dob);
如果您尝试更新其他用户的个人资料(例如,您是输入客户用户名的管理员),您可以使用以下内容。
Dim p As ProfileCommon = Profile.GetProfile("Usr1")
p.TestValue1 = "New Value"
p.TestValue2 = "Another New Value"
p.Save()
同样,如果您使用的是 Web 项目而不是网站,则必须使用 p.SetPropertyValue() 而不是强类型属性名称。
我有类似的问题并使用 sql 脚本搜索解决方案。这有点困难,但如果服务器端代码不是一个选项,它是可行的。我在 dbo.aspnet_Profile (PropertyValuesString, PropertyNames) 中设置了两个字段
UPDATE dbo.aspnet_Profile
SET
PropertyValuesString = cast(Replace(cast(PropertyValuesString as nvarchar(max)),'New Value','Old Value') as ntext)
,PropertyNames='New calculated property names'
WHERE
UserId='userID'
困难的部分是更改 PropertyNames 字段。它包含配置文件名称属性、起始位置和长度。类似的东西:地址:S:31:12您必须相应地重新计算起始位置和长度新值。