上接[翻譯]在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和使用自定義數據庫等等。
相關文章
相關標籤/搜索