上接[翻译]在asp.net 2.0中使用WebParts

ImportCatalog
ImportCatalog用来显示导入的webpart列表。咱们能够导入扩展名为.WebPart的文件。若是要导出类型为.WebPart的文件你须要在web.config增长以下元素
<webParts enableExport="true"></webParts>
 
而后咱们有两种方法能够实现导出功能
设置控件的属性ExportMode的值为All。若是你的控件继承自WebPart就能够这么作,代码以下
<aspSample:CustomWebPart id="Sample" runat="server" ExportMode="All" />
 
或者在Page_Load里写以下代码
GenericWebPart gwp = WebUserControl2_1.Parent;
gwp.ExportMode = WebPartExportMode.All;
 
经过导入功能咱们就能够增长任何webpart了,图例以下
 
 
Connect mode
Connect mode容许各个webpart之间能够互相通讯。用户能够依照他们的须要在运行时建立他们的链接。这个链接并非让webpart链接到数据库,而是webpart之间的互相链接。例如,若是有一个webpart里包含一个grid,它要根据用户的输入显示相应的记录,而用户使用的TextBox在另外一个webpart里,此时就要使用Connect mode发送数据。

在咱们的例子里,咱们将在一个页里放置两个webpart。一个负责用户输入,另外一个负责显示。在你的web站点里新建两个用户控件,分别命名为“Provider”和“Consumer”,并把它们放到相应的webpart里。在App_Code文件夹里新建一个名为“ITextProvicer”的类。代码以下:
public interface ITextToPass
{
     string GetText();
}
 
咱们会在Provider和Consumer两个用户控件中使用这个接口,以实如今这两个实体之间传送数据

在Provider用户控件里放置一个TextBox,并输入以下后置代码
public partial class ProviderWebPart : System.Web.UI.UserControl, ITextToPass
{    
    [ConnectionProvider( "TextToPass", "TextProvider")]
     public ITextToPass GetTextTransferInterface()
    {
         return ((ITextToPass)( this));
    }

     public string GetText()
    {
         return TextBox1.Text;
    }
}
 
你能够看到它实现了咱们刚刚建立的ITextToPass接口。经过使用这个接口,咱们能够返回用户输入的文本并传递给Consumer用户控件。

下一步在Consumer用户控件里放置一个Label,并在.cs文件里添加以下代码
[ConnectionConsumer( "Text", "TextConsumer")]
public void GetTextTransferInterface(ITextToPass provider)
{
    Label1.Text = provider.GetText();
}
 
如今选择WebPartManager的Connection mode,咱们就能够在webpart的菜单上看到“链接”选项
当咱们单击了webpart菜单的“链接”的时候,会看到以下图所示的状况
单击“建立提供者链接”,你会看到以下所示。而后从DropDownList里选择“Consumer”选项。
 
一旦建立完链接,就容许你在“Provider”中输入文本,以下图所示
 
单击按钮后“Consumer”的Label控件就会显示你输入的值
 
经过这种方法咱们就能够在webpart之间传输数据。


保存页面状态
在运行咱们的项目以前,有一个问题就是如何保存不一样用户的不一样页面状态呢?为了保存用户对页的修改,咱们就须要把这些设置保存到数据库里。在个人例子中使用到了注册和登陆控件。

首先你要在你的web.config设置验证模式为“Forms”。而后在你的项目中新建一个webform并取名为Login.aspx。拖拽一个Login控件到页上,设置它的DestinationPageUrl属性为Default.aspx。在你的项目中再新建另外一个webform,取名为Signup.aspx,拖拽一个CreateUserWizard控件在此页上。如此用户就能够注册和登陆了。另外你还要确保SqlExpress服务正在运行中。咱们使用asp.net自动在App_Data文件夹内建立的ASPNETDB.mdf为默认数据库。这个数据库已经提供了保存不一样用户的不用页设置的相关表和存储过程。其在Visual Studio环境中的截图出示以下
 
“PersonalizationPerUser”表就用于保存每一个用户的不用页设置状态。它将一个序列化的值保存到PageSettings字段里。幸运的是咱们不用接触这个表,由于asp.net 2.0给咱们提供了必需的API


建立数据库
为了建立一个数据库来保存咱们的页设置状态,须要运行“aspnet_regsql.exe”工具。这个工具在本地的\Windows\Framework\v2.0.50727文件夹里。它能够帮助咱们建立所需的表和存储过程。该工具向导的截屏以下
 
该工具会建立以下这些表
最后咱们要作的工做就是在web.config里作一些配置。下面将告诉你如何作,基本上就是要确保启动Membership和Profile特性。请注意其中的<Clear />标签,它将移除machine.config中的相应标签。咱们还要增长一个链接字符串以指向咱们的数据库,我把它命名为“Database1”
<connectionStrings>
<clear/>
<add name="LocalSqlServer"    
     connectionString="data source=127.0.0.1;database=Database1;
     user id=sa ;password=sa"/>
</connectionStrings>
<system.web>
<compilation debug="true"/>
<authentication mode="Forms" />
<membership>
    <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider"    
        type="System.Web.Security.SqlMembershipProvider, System.Web,    
        Version=2.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="LocalSqlServer"
        applicationName="/CustomConnections" />
    </providers>
</membership>

<profile enabled="true" defaultProvider="TableProfileProvider">
    <providers>
    <clear/>
    <add name="TableProfileProvider"
         type="Microsoft.Samples.SqlTableProfileProvider"
         connectionStringName="LocalSqlServer"
         table="asdspnet_Profile"
            applicationName="/CustomConnections"/>
    </providers>
    </profile>
</system.web>
 
总结webparts为咱们提供了一个在运行时自定义web站点的简单方法。它是从SharePoint中提取出来,并引进到asp.net 2.0中的。咱们已经在本文中测试了它的一些基本用法,如使用不一样类型的webpart和使用自定义数据库等等。
相关文章
相关标签/搜索