国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
使用 IIS 進行 ASP.NET 2.0 成員/角色管理(2):實現(xiàn)
摘要:本文介紹如何通過創(chuàng)建三層結構式 ASP.NET 2.0 應用程序來維護 IIS 生產(chǎn)服務器中的成員身份數(shù)據(jù)庫和角色數(shù)據(jù)庫。

  簡介

  成員身份編輯器

  Microsoft Visual Studio 2005 版本中沒有用于維護 Microsoft IIS 中的成員身份數(shù)據(jù)庫和角色數(shù)據(jù)庫的“現(xiàn)成”解決方案。將開發(fā)環(huán)境中的應用程序移至 IIS 生產(chǎn)服務器時這就會是個問題。Microsoft 提供的實用程序 ASP.NET Web Configuration 只能在非生產(chǎn)的開發(fā)環(huán)境中運行。本文及其關聯(lián)代碼將通過對成員和角色管理實現(xiàn)三層式解決方案,同時使用 Microsoft ASP.NET 標準工具,來解決這個問題。這意味著該實用程序?qū)⒖稍谌魏?ASP.NET 2.0 環(huán)境(包括 IIS)中運行。該解決方案十分靈活,可以輕易添加到任何現(xiàn)有的 ASP.NET 2.0 網(wǎng)站項目中。

  該解決方案的層定義如下。第一層 ASP.NET 頁面(也稱為表示層)通過對象數(shù)據(jù)源與兩個業(yè)務對象進行連接。這些業(yè)務對象起中間層作用,是成員和角色的包裝程序。第三層(即后端)由 ASP.NET 提供的成員身份和角色管理器 API 組成。中間層對象可以輕松地加入任何 ASP.NET 2.0 項目,并且?guī)缀鯚o需進行任何更改就可以直接使用。

  本文深入地介紹了中間層(即數(shù)據(jù)對象及其關聯(lián) ObjectDataSource)的實現(xiàn)。接著,介紹了如何在使用 Microsoft SQL Server Express 2005(捆綁有 Visual Studio 2005)的 ASP.NET Web 項目中使用這些對象。但是由于 Microsoft 提供的成員身份 API 使用其提供商的技術,因此此處介紹的解決方案與數(shù)據(jù)庫無關。從 LDAP、SQL Server 或 Oracle 即可輕松獲得成員身份和角色信息。

  采用的技術

  ObjectDataSource

  定義了兩個 ObjectDataSource 實例。一個是有關成員身份數(shù)據(jù)(用戶名、創(chuàng)建日期、批準狀態(tài)等)的,另一個是有關角色(管理員、朋友等)的。這兩個數(shù)據(jù)源均完全填充了所有數(shù)據(jù)訪問方法,即兩者都包含執(zhí)行插入、更新、刪除和選擇的 Member 函數(shù)。兩個 ObjectDataSource 實例都返回 Generic List 類型,這意味著在 GridView 中,列名將自動設置為 ObjectDataSource 的屬性值名。此外,還實現(xiàn)了自定義排序,以便用戶可以單擊 GridView 中的列標題來根據(jù)需要對數(shù)據(jù)進行正向或反向排序。

  SQL Server Express 2005 和 Web.Config

  成員身份數(shù)據(jù)庫和角色數(shù)據(jù)庫的數(shù)據(jù)提供程序源是 SQL Server Express 2005。為實現(xiàn)這一點,需要在 web.config 文件中設置相應的條目。本文稍后將對如何從頭開始設置新項目進行簡要的介紹。web.config 文件中未提及 SQL Server Express 2005 的連接字符串,因為它已在 Microsoft .NET 2.0 Framework 的默認部分 Machine.Config 文件中定義。

  支持 IIS(5.1 和 6.0)

  Web 服務器可以為 5.1 版,也可以為 6.0 版。若要對登錄 Web 應用程序的多個用戶進行測試,必須使用 IIS。內(nèi)置開發(fā) Web 服務器不能正確保持各不同登錄用戶的狀態(tài)。內(nèi)置開發(fā) Web 服務器不能正確保持各不同登錄用戶的狀態(tài)。盡管可以使 Asp.net Web 配置工具與 IIS 一起工作,但尚未完成實現(xiàn)這一目的所必需的附加安全工作。

  GridView 控件

  GridView 用于顯示成員身份和角色的數(shù)據(jù)。如上文所述,由于使用了 ObjectDataSource 的 Generic 類型,GridView 的列名將自動以 ObjectDataSource 的屬性值命名。如果沒有使用 Generic 類型,則列名恢復為無意義的默認值,必須手動逐個進行編輯。

  應用程序和項目

  運行此實用程序所需的項目非常簡單,并且是獨立的。項目文件可以下載,包含功能完整的示例。由于用戶和角色沒有直接訪問數(shù)據(jù)庫的權限,因此所要做的事情就是獲取三個數(shù)據(jù)對象(MembershipDataObject.cs、MembershipUserSortable.cs 和 RoleDataObject.cs,請參見圖 2)。

圖 2:成員身份編輯器項目

  SamplePages 文件夾中有幾個其他的示例,演示了前面提及的模塊的用法。圖 1 中顯示的 Membership.aspx 即是其中一例,它可用于選擇、更新、插入及刪除成員和角色,以及為成員分配角色。

  使用已有工作成員身份模塊的工作 ASP.NET 2.0 應用程序時,無需對這些頁面進行已做配置之外的外部配置??梢詫⑦@些文件直接復制到項目中,復制后即可使用。

  如果是第一次在應用程序中實現(xiàn)成員身份和角色管理,則創(chuàng)建使用這些對象的解決方案的過程如下,

  1. 使用 Visual Studio 2005 創(chuàng)建類型為 ASP.NET 網(wǎng)站的新 Web 項目。
 
  2. 單擊菜單上的 Website / ASP.NET Configuration(網(wǎng)站/ASP.NET 配置)。
 
  3. 按照向?qū)崾镜牟襟E(1 至 7)進行操作來創(chuàng)建一些示例用戶和角色。這將在當前項目中有效地創(chuàng)建有效 web.config 文件,其中包含能夠啟動并運行成員管理的充足信息。默認情況下,它將在其默認配置中使用 SQL Server Express 2005。
 
  4. 在項目中添加三個 .cs 文件,然后添加示例 .aspx 頁面作為示例。

  ObjectDataSource 詳細信息

  采用 ObjectDataSource 技術可以創(chuàng)建作用與 SqlDataSource 非常相似的數(shù)據(jù)源,即它提供允許從永久數(shù)據(jù)存儲區(qū)(例如數(shù)據(jù)庫)中進行選擇、更新、插入和刪除記錄(或類似記錄的對象)的界面。本文以下各部分將討論 ObjectDataSource 用于操作成員身份的對象(即類文件)。其在項目中的名稱為 MembershipUserODS.cs。

  類 (MembershipUserODS)

  由于是通過 Microsoft 成員身份 API 檢索數(shù)據(jù),因此使用 ObjectDataSource 來解決問題。第一步是創(chuàng)建獨立的類,該類對 MembershipUser 進行包裝,以便它可以與 ObjectDataSource 關聯(lián)。下例中介紹了一組需要實現(xiàn)的典型方法,本文以下各部分將介紹如何實現(xiàn)每個成員函數(shù)。本文省略了許多細節(jié),但本文附帶的源代碼中包含這些細節(jié)。

[DataObject(true)
public class MembershipUserWrapper {

  [DataObjectMethod(DataObjectMethodType.Select, true)]
  static public Collection<MembershipUserWrapper> GetMembers(string
       sortData) {
    return GetMembers(true, true, null, sortData);
  }

  [DataObjectMethod(DataObjectMethodType.Insert, true)]
  static public void Insert(string UserName, bool isApproved,
string comment, DateTime lastLockoutDate, ...) {
  }
       
  [DataObjectMethod(DataObjectMethodType.Delete, true)]
  static public void Delete(object UserName, string Original_UserName){
    Membership.DeleteUser(Original_UserName, true);
  }
 
  [DataObjectMethod(DataObjectMethodType.Update, true)]
  static public void Update(string original_UserName,string email,...){
  }
}

  類聲明

  上面顯示的類聲明因具有屬性 [(DataObject(true)],比較特殊。此屬性告訴 Visual Studio 2005 ObjectDataSource 創(chuàng)建向?qū)?,在?shù)據(jù)類中搜索 DataObject 時只查找具有此特殊屬性的成員。請參閱本部分中介紹在何處為 GridView 組件分配此類的示例。

  Insert 方法

  各部分的細節(jié)都涉及以非常簡單的方式使用 Microsoft 提供的成員身份 API。例如,下面是一個較詳細的典型 Insert 方法。

[DataObjectMethod(DataObjectMethodType.Insert,true)]
static public void Insert(string userName, string password,)
{
   MembershipCreateStatus status;
      Membership.CreateUser(userName, password,);
}

  此類 Insert 是多態(tài)的,這意味著可以存在用于不同目的的多個 Insert 方法。例如,動態(tài)決定是否應該根據(jù)環(huán)境批準創(chuàng)建的用戶時,可能需要使用它。又如,在管理屏幕中創(chuàng)建的新用戶可能想創(chuàng)建默認為已批準的用戶,而用戶注冊屏幕可能默認為未批準。為此,需要另一個具有額外參數(shù)的 Insert 方法??蓪崿F(xiàn)此目標的 Insert 方法大致如下。

[DataObjectMethod(DataObjectMethodType.Insert,false)]
static public void Insert(string userName, string password, bool isApproved)
{
MembershipCreateStatus status;
   Membership.CreateUser(UserName, password,,
      isApproved, out status);
}

  與此處所列的其他方法一樣,顯示的示例并非附帶源中實際存在的示例。此處的示例是為了說明各個方法的典型用法。源代碼中包含的用法更為完備且?guī)в凶⑨尅?/p>

  Update 方法

  Update 方法是實現(xiàn)成員身份 API 的一種非常簡單的方法。與 Insert 方法一樣,Update 方法也可以有多種實現(xiàn)。此處只介紹一種實現(xiàn)。在可下載的代碼中,有更多 Update 的多態(tài)實現(xiàn),其中一種只設置 IsApproved 屬性(如下例所示)。

[DataObjectMethod(DataObjectMethodType.Update,false)]
static public void Update(string UserName,bool isApproved)
{
   bool dirtyFlag = false;
   MembershipUser mu = Membership.GetUser(UserName);
   if (mu.isApproved != isApproved)
   {
      dirtyFlag = true;
      mu.IsApproved = isApproved;
   }
   if (dirtyFlag == true)
   {
      Membership.UpdateUser(mu);
   }
}

  Delete 方法

  Delete 方法是最簡單的方法,它只使用一個參數(shù) UserName。

static public void Delete(string UserName)
{
   Membership.DeleteUser(UserName,true);
}

  具有 Sort 屬性的 Select 方法

  在本示例中,Select 方法 GetMembers 具有多個組件,每個組件都值得介紹。首先介紹其返回的值,然后是方法本身,最后介紹其如何排序返回值。

  Select 方法的返回值(類型為 Collection)

  Select 方法(也稱為 Get)的返回值為 Generic Collection 類。使用 Generic 是因為最終與該類關聯(lián)的 ObjectDataSource 使用反射來確定列名和類型。這些名稱和類型與返回的每行數(shù)據(jù)相關聯(lián)。此方法與 SqlDataSource 使用表或存儲過程的數(shù)據(jù)庫元數(shù)據(jù)來確定每行的列名相同。由于 Select 方法的返回類型為 MembershipUserWrapper(繼承自 MembershipUser),此類的大多數(shù)屬性都是與 MembershipUser 關聯(lián)的相同屬性。這些屬性包括,

• ProviderUserKey
 
• UserName
 
• LastLockoutDate
 
• CreationDate
 
• PasswordQuestion
 
• LastActivityDate
 
• ProviderName
 
• IsLockedOut
 
• Email
 
• LastLoginDate
 
• IsOnline
 
• LastPasswordChangedDate
 
• Comment

  在此插一句,屬性值有一個非常好的特點 - 它們可以是只讀的(無設置方法)、只寫的(無讀取方法),當然也可以是讀/寫的。ObjectDataSource 向?qū)Э紤]到了這一點,并創(chuàng)建了相應的參數(shù),這樣在使用 ObjectDataSource 呈現(xiàn)數(shù)據(jù)控件時,只有可更新(讀/寫)的字段能夠編輯。這意味著您不能更改某些屬性,例如 UserName 屬性。如果這一點現(xiàn)在還不清楚,稍后在我們更詳細地闡述 ObjectDataSource 和數(shù)據(jù)組件時,就容易明白。

  Select 方法本身

  與 Insert 和 Update 方法一樣,Select 方法也是多態(tài)的。有多少種情況,就可以有多少種 Select 方法。例如,最好能夠使用 Select 方法按照用戶的批準狀態(tài)(已批準、未批準或兩者)來選擇用戶。通常,有一個 Get 方法具有與其關聯(lián)的盡可能多的參數(shù),其他 Get 方法對其進行調(diào)用。在我們的示例中,有三個 Get 方法,一個檢索所有記錄,一個根據(jù)批準狀態(tài)檢索記錄,一個根據(jù)選擇字符串檢索單個記錄。下例介紹的是調(diào)用返回所有用戶的方法。將兩個布爾值均設置為 true,可以返回所有用戶。

[DataObjectMethod(DataObjectMethodType.Select, true)]
static public List<MembershipData> GetMembers(string sortData)
{
   return GetMembers(true,true,null,null);
}

  下面的示例介紹了一個較詳細的 Get 方法。此示例僅介紹方法的開頭部分,未介紹方法的詳細信息,包括完成屬性分配、按批準狀態(tài)篩選并拒絕不滿足條件的記錄,以及應用排序條件。此示例后面是有關排序條件的詳細說明。(請注意,對包含數(shù)百個用戶 [不超過五百] 的數(shù)據(jù)庫調(diào)用 GetAllUsers,很快就會成為代價非常高昂的操作。)

[DataObjectMethod(DataObjectMethodType.Select, true)]
static public List<MembershipData> GetMembers(bool AllApprUsers,
    bool AllNotApprUsers, string UserToFind, string sortData)
{
   List<MembershipData> memberList = new List<MembershipData>();
   MembershipUserCollection muc = Membership.GetAllUsers();
   foreach (MembershipUser mu in muc)
   {
      MembershipData md = new MembershipData();
      md.Comment = mu.Comment;
      md.CreationDate = mu.CreationDate;
            ...

  自定義排序條件

  請注意,在前面的代碼中,名為 sortData 的參數(shù)字符串傳遞到了 GetMembers 中。如果在 ObjectDataSource 聲明中,SortParameterName 被指定為其一個屬性,則此參數(shù)將自動傳遞到所有 Select 方法。其值將為數(shù)據(jù)控件列中的 SortExpression 屬性指定的名稱。在我們的示例中,數(shù)據(jù)控件為 GridView。

  Comparer 方法是根據(jù)傳遞給 GetMembers 方法的 sortName 參數(shù)調(diào)用的。由于這些 ASP.NET 網(wǎng)頁無狀態(tài),因此必須假定當前排序的方向(正向或反向)存儲在視圖狀態(tài)中。每次調(diào)用都顛倒前一次調(diào)用的方向。即用戶單擊列標題時,在正向排序和反向排序之間切換。

  假定使用的是 GridView,傳遞到 GetMembers(sortData) 的參數(shù)中包含 GridView 列的屬性 SortExpression 中的數(shù)據(jù)。如果請求反向排序,則“DESC”一詞附加在排序字符串后面。例如,用戶第一次單擊 Email 列時,傳遞到 GetMembers 的 sortData 為“Email”。用戶第二次單擊該列時,參數(shù) sortData 就變?yōu)?#8220;Email DESC”,然后是“Email”、“Email DESC”,依此類推。特別需要注意的是,第一次加載頁面時,傳遞的 sortData 參數(shù)是零長度的字符串(非空)。下面是 GetMembers 方法的一部分,該方法檢索數(shù)據(jù)并對其進行排序,以便按正確的順序返回這些數(shù)據(jù)。

[DataObjectMethod(DataObjectMethodType.Select, true)]
static public List<MembershipData> GetMembers(string sortData)
{
  List<MembershipData> memberList = new List<MembershipData>();
  MembershipUserCollection muc = Membership.GetAllUsers();
  List<MembershipUser> memberList = new List<MembershipUser>(muc);

  foreach (MembershipUser mu in muc)
  {
    MembershipData md = new MembershipData(mu);
    memberList.Add(md);
  }

  ... Code that implements Comparison

   memberList.Sort(comparison);
 
  return memberList;
}

  在下一部分中,將此并入 GridView 中后,就比較清楚了。

  ObjectDataSource 聲明

  聲明 ObjectDataSource 最簡單的方法是,先使用 Visual Studio 2005 向?qū)?chuàng)建一個空的 ASP.NET 頁面,然后將數(shù)據(jù)控件中的數(shù)據(jù)控件拖放到工具欄中。創(chuàng)建 ObjectDataSource 后,可以獲取新建 ObjectDataSource 右上角的小標記;然后單擊 Configure Data Source(配置數(shù)據(jù)源)打開一個向?qū)В渲酗@示“Configure Data Source-ObjectDataSource1”(配置數(shù)據(jù)源 - ObjectDataSource1)(請參見圖 3)。

圖 3:配置 ObjectDataSource

  此時,將顯示可與 ObjectDataSource 關聯(lián)的兩個類。MembershipUserODS 是本文的主要主題。RoleDataObject 基本相同,但其封裝成員身份角色。另外,請記住,此處顯示的只是聲明具有特殊類屬性 [DataObject(true)](在“類定義”中介紹)的對象。

  選擇 MembershipUserODS 后,將顯示一個具有四個選項卡的對話框。要通過 MembershipUserODS 類調(diào)用的方法將在這些選項卡中定義。Select、Update、Insert 和 Delete 方法將與 MembershipUserODS 中的成員函數(shù)關聯(lián)。在許多情況下,類中都有多種方法適用于其中每種情況。必須根據(jù)所需數(shù)據(jù)方案選擇一個適當?shù)姆椒?。圖 4 中顯示了這四個選項卡。默認情況下,將在這些選項卡中填充標有特殊屬性 [DataObjectMethod(DataObjectMethodType.Select, false)] 的成員。當然,此特殊屬性是 Select 的默認值。將表達式 DataObjectMethodType.Select 改為 DataObjectMethodType.Insert、DataObjectMethodType.Update 和 DataObjectMethodType.Delete 將為其他選項卡確定相應的默認值。第二個參數(shù)是一個布爾值,表示此方法(請記住,它能以多態(tài)方式定義)是默認方法,應在選項卡控件中使用。

  Select 方法

  如前面在介紹 MembershipUserODS 類的部分中所述,GetMembers 函數(shù)返回 Generic Collection 類。這樣,此處定義的 ObjectDataSourceMembershipUser 控件可以使用反射,并確定與 GetMembers 調(diào)用關聯(lián)的調(diào)用參數(shù)。在本示例中,用于調(diào)用 GetMembers 的參數(shù)是 returnAllApprovedUsers、returnAllNotApprovedUsers、userNameToFind 和 sortData。基于此,新 ObjectDataSource 的實際定義如下。

圖 4:指定 Select 方法

<asp:ObjectDataSource ID="ObjectDataSourceMembershipUser"runat="server"
    SelectMethod="GetMembers" UpdateMethod="Update"
    SortParameterName="SortData"
    TypeName="MembershipUtilities.MembershipDataODS"
    DeleteMethod="Delete" InsertMethod="Insert" >
    <SelectParameters>
      <asp:Parameter Name="returnAllApprovedUsers" Type="Boolean" />
      <asp:Parameter Name="returnAllApprovedUsers" Type="Boolean"/>
      <asp:Parameter Name="usernameToFind"         Type=" String" />
      <asp:Parameter Name="sortData"               Type=" String" />
    </SelectParameters>
    ...
    ...
</asp:ObjectDataSource>

  Insert 方法

  在本示例中,Insert 方法被指定給成員函數(shù) Insert()。請注意,調(diào)用此方法時只使用了兩個參數(shù),UserName 和 Password(請參見圖 5)。參數(shù)的數(shù)目必須等于 ObjectDataSource 中聲明的參數(shù)的數(shù)目。ObjectDataSource 中的參數(shù)聲明如下所示。另一個定義的函數(shù)為 Insert Member,用于添加第三個參數(shù),approvalStatus。如果此 ObjectDataSource 的功能要包括在設置 approvalStatus 時進行插入操作,則應從下拉列表中選擇其他 Insert 方法。這會導致以下 InsertParameters 插入 .aspx 頁面中。如果選擇包含兩個參數(shù)的方法,則塊中不會包括名為 isApproved 的 asp:Parameter。請記住,本示例可能與附帶的源代碼不一致,此處僅作為示例。附帶的源代碼要完整得多。

圖 5:指定 Insert 方法

<asp:ObjectDataSource ID="ObjectDataSourceMembershipUser"runat="server"
    SelectMethod="GetMembers"UpdateMethod="GetMembers"
    SortParameterName="SortData"
    TypeName="MembershipUtilities.MembershipDataObject"
    DeleteMethod="Delete" InsertMethod="Insert">
    <InsertParameters>
        <asp:Parameter Name="userName" Type="String" />
        <asp:Parameter Name="password" Type="String" />
        <asp:Parameter Name="isApproved" Type="Boolean" />
    </InsertParameters>
    ...
</asp:ObjectDataSource>

  請記住,如果使用的是具有最少參數(shù)的 Insert 方法,則需要在方法中設置默認密碼。在生產(chǎn)系統(tǒng)中,這是個糟糕的辦法。有關如何處理插入的更好示例,請參閱附帶的源代碼。具體地說,請參閱 Membership.aspx 頁面了解此功能。

  Update 方法

  在本示例中,Update 方法被指定給成員函數(shù) Update()。請注意,調(diào)用此方法時使用了多個參數(shù),UserName、Email、isApproved 和 Comment(請參見圖 6)。此外,還有一種 Update 方法,它包含所有可更新參數(shù)。如果要創(chuàng)建具有盡可能多的更新功能的控件,這很有用。與 Insert 一樣,為此 ObjectDataSource 選擇適當?shù)?Update 方法。完成向?qū)Ш?,將自動?chuàng)建 UpdateParameters,如下所示。

圖 6:指定 Update 方法

<asp:ObjectDataSource ID="ObjectDataSourceMembershipUser"runat="server"
    SelectMethod="GetMembers" InsertMethod="Insert"
    SortParameterName="SortData"
    TypeName="MembershipUtilities.MembershipUserODS"
    UpdateMethod="Update" DeleteMethod="Delete">
    <UpdateParameters>
        <asp:Parameter Name="Original_UserName" />
        <asp:Parameter Name="email" Type="String" />
        <asp:Parameter Name="isApproved" Type="Boolean" />
        <asp:Parameter Name="comment" Type="String" />
    </UpdateParameters>
    ...
    ...
</asp:ObjectDataSource>

  Delete 方法

  在本示例中,Delete 方法被指定給成員函數(shù) Delete()。當然,只需一個 Delete 方法(請參見圖 7)。下面是支持此 Delete 方法的 ObjectDataSource 的聲明。

圖 7:指定 Delete 方法

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetMembers" InsertMethod="Insert"
    SortParameterName="SortData"
    TypeName="MembershipUtilities.MembershipUserODS"
    UpdateMethod="Update" DeleteMethod="Delete">
    <DeleteParameters>
        <asp:Parameter Name="UserName" />
        <asp:Parameter Name="Original_UserName" />
    </DeleteParameters>
    ...
</asp:ObjectDataSource>

  類 (RoleDataObject)

  與成員身份一樣,設置角色時也使用其自己的 DataObject。由于角色無特殊之處,本文不對其設置進行詳細介紹。了解成員身份 DataObject 的設置方式后,即可了解角色的設置方式。在成員身份中,封裝成員身份 API 的 Microsoft C# 對象是 MembershipDataObject.cs。封裝角色 API 的相似類是 RoleDataObject.cs。

  GridView 中的 ObjectDataSource(數(shù)據(jù)控件)

  本文的前面部分中已建立了成員身份用戶和角色的類聲明。此外,還在 ASP.NET 頁面中加入了完整的 ObjectDataSource 對象。最后一步是創(chuàng)建用戶界面,也稱為應用程序的用戶互動層或表示層。由于創(chuàng)建的對象完成了這么多的工作,因此所需做的只是創(chuàng)建簡單的 GridView 并將其與 ObjectDataSource 關聯(lián)。步驟如下,

  1. 在 ASP.NET 頁面設計器的可視模式下,將 GridView 數(shù)據(jù)組件拖放到先前創(chuàng)建的 ObjectDataSource 關聯(lián)頁面中。
 
  2.啟用選擇、刪除、更新、插入和排序。

  圖 8 顯示的是與配置 Gridview 關聯(lián)的對話框。

圖 8:配置 GridView

  此處應特別注意,下面顯示的 GridView 控件中的 DataKeyNames 是自動設置的。這是因為,在具有屬性 [DataObjectField(true)] 的 MembershipUserSortable 類中對主鍵添加了標記,如下所示。請注意,由于 UserName 是 MembershipUser 類的屬性,需要在擴展 MembershipUser 的類中提供默認屬性。由于是只讀屬性,因此只聲明了 Get 方法(對于 MembershipUser,UserName 是公共虛擬的)。

[DataObjectField(true)]
public override string UserName {
  get { return base.UserName;
}

GridView 中有一個屬性必須手動設置,必須在控件中設置主鍵。為此,需要將屬性 DataKeyName 與 UserName 相關聯(lián)。GridView 聲明如下。

<asp:GridView ID="GridView1" DataKeyNames="UserName" runat="server"
        AllowPaging="True" AutoGenerateColumns="False"
        DataSourceID="ObjectDataSourceMembershipUser"
        AllowSorting="True">
    <Columns>
    ...
    ...

  結論

  至此,您現(xiàn)在應熟悉如何創(chuàng)建自己的三層結構式 ASP.NET 應用程序。此外,目前還要有兩個可任意使用來封裝成員和角色的對象。例如,現(xiàn)在可以使用 DetailView 控件,在幾分鐘內(nèi)創(chuàng)建一個針對成員的完整 DetailView 界面,用于對成員進行導航、插入、更新及刪除操作。試一試吧!

  我并未具體介紹如何實現(xiàn)添加、更新和刪除成員或角色。如果您查看源代碼,就會發(fā)現(xiàn)我使用 API 的方法非常簡單。在此詳細介紹那些調(diào)用并無多大用處,因為我確信,如果您仍在閱讀本文,您會和我一樣,邊學邊實踐。

  今年我有幸參加了在奧蘭多舉辦的 MS TechEd 和在洛杉磯舉辦的 PDC,有機會向 ASP.NET 小組請教了許多問題。特別感謝 Brad Millington 和 Stefan Schackow 在這幾周解答了我提出的許多問題,感謝 Jeff King 和 Brian Goldfarb 對本文進行潤色提供的所有幫助。從某些方面來講,本文是對提供過幫助的人的回報,希望他們將來不必回答這么多問題。

作者:Peter Kellner  來源:MSDN  (責任編輯:webjx) 
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
GridView的RowDeleting、RowUpdating和RowCommand事件...
Asp.net2.0:如何使用ObjectDataSource
ASP.NET 2.0 數(shù)據(jù)操作:插入、更新、刪除數(shù)據(jù)時的事件
ASP.NET 2.0中實現(xiàn)模板中的數(shù)據(jù)綁定
使用SQL Cache Dependencies
ASP.NET 2.0 的數(shù)據(jù)源、數(shù)據(jù)綁定控件概述與區(qū)別
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服