一般来说,WebPart使用系统集成的验证 方式,而很多时间我们需要自己的登录机制,那么这个时候,就需要将我们的登陆用户,关联到WebPart的个性化信息设置。
分几个步骤:
1。生成WebPart的个性化数据库,配置个性化数据库连接。参考:http://blog.youkuaiyun.com/addyou/archive/2007/06/21/1660387.aspx
2。创建自己的个性数据提供程序
需要创建/重载三个类,如下:
(1) PortalSqlPersonalizationProvider
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
namespace
HFWebCtlLib
...
{
public class PortalSqlPersonalizationProvider : SqlPersonalizationProvider
...{
protected override void SavePersonalizationBlob(WebPartManager webPartManager, string path, string userName, byte[] dataBlob)
...{
base.SavePersonalizationBlob(webPartManager, path, GetLoginUserId(), dataBlob);
}
protected override void LoadPersonalizationBlobs(WebPartManager webPartManager, string path, string userName, ref byte[] sharedDataBlob, ref byte[] userDataBlob)
...{
base.LoadPersonalizationBlobs(webPartManager, path, GetLoginUserId(), ref sharedDataBlob, ref userDataBlob);
}
protected override void ResetPersonalizationBlob(WebPartManager webPartManager, string path, string userName)
...{
base.ResetPersonalizationBlob(webPartManager, path, GetLoginUserId());
}
public override PersonalizationScope DetermineInitialScope(WebPartManager webPartManager, PersonalizationState loadedState)
...{
return webPartManager.Personalization.InitialScope;
}
/**//// <summary>
/// 返回当前登录用户ID
/// </summary>
/// <returns></returns>
private string GetLoginUserId()
...{
return System.Web.HttpContext.Current.Session["userid"].ToString();
}
}
}
(2) PortalWebPartPersonalization
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Web;
using
System.Web.UI.WebControls.WebParts;
using
System.Collections;
namespace
HFWebCtlLib
...
{
public class PortalWebPartPersonalization : WebPartPersonalization
...{
public PortalWebPartPersonalization(WebPartManager webPartManager) : base(webPartManager)
...{}
protected override System.Collections.IDictionary UserCapabilities
...{
get
...{
Hashtable capabilities = new Hashtable();
capabilities.Add(WebPartPersonalization.ModifyStateUserCapability, WebPartPersonalization.ModifyStateUserCapability);
return capabilities;
}
}
}
}
(3) PortalWebPartManager ——这是WebPartManager控件的替代,在页面中使用该控件
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
namespace
HFWebCtlLib
...
{
[DefaultProperty("Url")]
[ToolboxData("<{0}:PortalWebPartManager runat=server></{0}:PortalWebPartManager>")]
public class PortalWebPartManager : WebPartManager
...{
protected override WebPartPersonalization CreatePersonalization()
...{
return new PortalWebPartPersonalization(this);
}
}
}
以上三个类,可以创建在一个单独的类库或者控件库中,最好不要放在项目本身的类里。
4。 修改Web.config文件,确保有以下配置节
<
configuration
>
<
connectionStrings
>
<
remove
name
="LocalSqlServer"
/>
<
add
name
="LocalSqlServer"
connectionString
="Data Source=10.138.194.69;Initial Catalog=aspnetdb;Persist Security Info=True;User ID=sa;Password=123456"
providerName
="System.Data.SqlClient"
/>
</
connectionStrings
>
<
system
.web
>

<
webParts
>
<
personalization
defaultProvider
="PortalProvider"
>
<
providers
>
<
add
name
="PortalProvider"
type
="HFWebCtlLib.PortalSqlPersonalizationProvider"
connectionStringName
="LocalSqlServer"
/>
</
providers
>
</
personalization
>
</
webParts
>
</
system.web
>
</
configuration
>
通过以上步骤,程序在运行时,自session中取登录用户的ID作为个性化的依据,这样就可以实际为系统内的用户提供个性化定制的功能了。
本文介绍如何在WebPart中实现自定义登录机制,并与个性化信息设置关联。主要步骤包括生成个性化数据库、创建个性数据提供程序及修改配置文件。
2215

被折叠的 条评论
为什么被折叠?



