上接[翻译]在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了,图例如下
上接[翻译]在asp.net 2.0中使用WebParts_第1张图片
 
 
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和使用自定义数据库等等。
 
 
 
 
 

你可能感兴趣的:(职场,asp,翻译,休闲,webparts)