演练:创建应用程序页

“应用程序页”是 ASP.NET 页的专用形式。 应用程序页包含与 SharePoint 母版页合并的内容。 有关更多信息,请参见为 SharePoint 创建应用程序页

本演练演示如何使用本地 SharePoint 网站创建应用程序页并调试该页。 当前用户可以通过此应用程序页查看他们在服务器场中的所有网站中创建或修改的所有项。

本演练阐释了以下任务:

  • 创建 SharePoint 项目。

  • 向该 SharePoint 项目添加应用程序页。

  • 向该应用程序页添加 ASP.NET 控件。

  • 在 ASP.NET 控件后添加代码。

  • 测试应用程序页。

提示

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置

系统必备

您需要以下组件来完成本演练:

  • 支持的 Microsoft Windows 和 SharePoint 版本。 有关更多信息,请参见开发 SharePoint 解决方案的要求

  • Visual Studio 2010 专业版或 Visual Studio Application Lifecycle Management (ALM) 的某个版本。

创建 SharePoint 项目

首先,创建一个**“空 SharePoint 项目”。 然后,向该项目添加“应用程序页”**项。

创建 SharePoint 项目

  1. 启动 Visual Studio 2010。

  2. 打开**“新建项目”对话框,展开要使用的语言下的“SharePoint”节点,然后单击“2010”**。

  3. 在**“Visual Studio 已安装的模板”窗格中,选择“空 SharePoint 项目”。 将该项目命名为“MySharePointProject”,然后单击“确定”**。

    这将显示**“SharePoint 自定义向导”**。 使用此向导可以选择用于调试项目的站点以及解决方案的信任级别。

  4. 选择**“部署为场解决方案”,然后单击“完成”**以接受默认的本地 SharePoint 网站。

创建应用程序页

若要创建应用程序页,请向该项目添加**“应用程序页”**项。

创建应用程序页

  1. 在**“解决方案资源管理器”中,选择“MySharePointProject”**项目。

  2. 在**“项目”菜单上,单击“添加新项”**。

  3. 在**“添加新项”对话框中,选择“应用程序页”**。

  4. 将该页命名为“SearchItems”,然后单击**“添加”**。

    Visual Web Developer 设计器将在**“源”**视图中显示应用程序页,您可以在该视图中查看此页的 HTML 元素。 该设计器显示多个 Content 控件的标记。 每个控件均映射到在默认应用程序母版页中定义的 ContentPlaceHolder 控件。

设计应用程序页的布局

通过“应用程序页”项,您可以使用设计器将 ASP.NET 控件添加到应用程序页中。 此设计器即是在 Visual Web Developer 中使用的设计器。 按照任何标准 ASP.NET 页的设计方式,将标签、单选按钮列表和表拖动到设计器的**“源”**视图中,并设置相应属性。

有关使用 Visual Web Developer 中的设计器的更多信息,请参见Visual Web Developer 内容映射

设计应用程序页的布局

  1. 在**“视图”菜单上单击“工具箱”**。

  2. 在**“工具箱”“标准”组中,将“标签”“DropDownList”“表”拖到“PlaceHolderMain”**内容控件的主体上。

  3. 在设计器中,将标签控件的 Text 特性的值更改为“显示所有项”。

  4. 在设计器中,用以下 XML 替换 <asp:DropDownList> 元素。

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"
     OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
        <asp:ListItem Text="Created by me" Value="Author"></asp:ListItem>
        <asp:ListItem Text="Modified by me" Value="Editor"></asp:ListItem>
    </asp:DropDownList>
    

处理该页上的控件的事件

按照任何 ASP.NET 页的控件的处理方式,处理应用程序页中的控件。 在此过程中,您将处理下拉列表的 SelectedIndexChanged 事件。

处理该页上的控件的事件

  1. 在**“视图”菜单上单击“代码”**。

    应用程序页代码文件随即在代码编辑器中打开。

  2. 将以下方法添加到 SearchItems 类中。 此代码通过调用将在本演练的稍后部分中创建的方法,来处理 DropDownListSelectedIndexChanged 事件。

     Protected Sub DropDownList1_SelectedIndexChanged _
    (ByVal sender As Object, ByVal e As EventArgs) _
    Handles DropDownList1.SelectedIndexChanged
         SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems)
     End Sub
    
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SPSecurity.RunWithElevatedPrivileges(GetItems);
    
    }
    
  3. 将以下语句添加到应用程序页代码文件的顶部。

    Imports System.Web.UI.WebControls
    Imports Microsoft.SharePoint.Administration
    Imports System.Collections
    
    using System.Web.UI.WebControls;
    using Microsoft.SharePoint.Administration;
    using System.Collections;
    
  4. 将以下方法添加到 SearchItems 类中。 此方法循环访问服务器场中的所有网站,并搜索由当前用户创建或修改的项。

    Private Sub GetItems()
        Dim CurrentUser As New SPFieldUserValue _
            (Me.Web, Me.Web.CurrentUser.ID, Me.Web.CurrentUser.Name)
    
        Dim ResultsList As New ArrayList()
    
        Dim ThisFarm As SPFarm = SPFarm.Local
        Dim Service As SPWebService = _
            ThisFarm.Services.GetValue(Of SPWebService)("")
    
        Dim WebApp As SPWebApplication
        For Each WebApp In Service.WebApplications
            Dim SiteCollection As SPSite
            For Each SiteCollection In WebApp.Sites
                Dim Web As SPWeb
                For Each Web In SiteCollection.AllWebs
                    Dim Lists As SPListCollection = Web.Lists
                    Dim List As SPList
                    For Each List In Lists
                        Dim Item As SPListItem
                        Try
                            For Each Item In List.Items
                                If Item(DropDownList1.SelectedValue).ToString() = _
                                    CurrentUser.ToString() Then
                                    ResultsList.Add(Item)
                                End If
                            Next Item
                        Catch exception As Exception
                            'Error in list. Move on to the next list.
                        End Try
                    Next List
                Next Web
            Next SiteCollection
        Next WebApp
        CreateResultsTable(ResultsList)
    End Sub
    
    private void GetItems()
    {
         SPFieldUserValue currentUser = new SPFieldUserValue
         (this.Web, this.Web.CurrentUser.ID, this.Web.CurrentUser.Name);
    
        ArrayList resultsList = new ArrayList();
    
        SPFarm thisFarm = SPFarm.Local;
        SPWebService service = thisFarm.Services.GetValue<SPWebService>("");
    
        foreach (SPWebApplication webApp in service.WebApplications)
        {
            foreach (SPSite siteCollection in webApp.Sites)
            {
                foreach (SPWeb web in siteCollection.AllWebs)
                {
                    SPListCollection lists = web.Lists;
                    foreach (SPList list in lists)
                    {
                        try
                        {
                            foreach (SPListItem item in list.Items)
                            {
                                if (item[DropDownList1.SelectedValue].ToString() ==
                                    currentUser.ToString())
                                {
                                    resultsList.Add(item);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            // An error with the list. Move onto the next list.
                        }
                    }
                }
            }
        }
        CreateResultsTable(resultsList);
    
    }
    
  5. 将以下方法添加到 SearchItems 类中。 此方法显示表中由当前用户创建或修改的项。

    Private Sub CreateResultsTable(ByVal ResultsList As ArrayList)
        Dim CurrentList As String = ""
        Dim CurrentSite As String = ""
        Table1.Rows.Clear()
    
        Dim Item As SPListItem
        For Each Item In ResultsList
            If Item.ParentList.ParentWeb.Title <> CurrentSite Then
                CurrentSite = Item.ParentList.ParentWeb.Title
    
                Dim NewSiteCell As New TableCell()
                NewSiteCell.Text = CurrentSite
    
                Dim NewSiteRow As New TableRow()
                With NewSiteRow
                    .Cells.Add(NewSiteCell)
                    .Font.Bold = True
                    .Font.Size = FontUnit.Larger
                    .Font.Underline = True
                End With
                Table1.Rows.Add(NewSiteRow)
    
            End If
    
            If Item.ParentList.Title <> CurrentList Then
                CurrentList = Item.ParentList.Title
                Dim NewListCell As New TableCell()
                NewListCell.Text = CurrentList
    
                Dim NewListRow As New TableRow()
                With NewListRow
                    .Cells.Add(NewListCell)
                    .Font.Bold = True
                End With
                Table1.Rows.Add(NewListRow)
    
                Dim ItemHeading As New TableCell()
                With ItemHeading
                    .Text = "Item"
                    .Font.Italic = True
                End With
    
                Dim CreatedHeading As New TableCell()
                With CreatedHeading
                    .Text = "Created"
                    .Font.Italic = True
                End With
    
    
                Dim ModifiedHeading As New TableCell()
                With ModifiedHeading
                    .Text = "Last Modified"
                    .Font.Italic = True
                End With
    
                Dim HeadingRow As New TableRow()
                HeadingRow.Cells.Add(ItemHeading)
                HeadingRow.Cells.Add(CreatedHeading)
                HeadingRow.Cells.Add(ModifiedHeading)
    
                Table1.Rows.Add(HeadingRow)
            End If
    
            Dim ItemName As New TableCell()
            Dim ItemLink As New HyperLink()
            Try
                ItemLink.href = Item.ParentList.ParentWeb.Url & _
                    "/" & Item.ParentList.Forms(PAGETYPE.PAGE_DISPLAYFORM).Url & _
                    "?ID=" & Item.ID
            Catch exception As Exception
                ' Some items might not have a form page. Ignore the exception.
            End Try
            ItemLink.Text = Item.DisplayName
            ItemName.Controls.Add(ItemLink)
    
            Dim Created As New TableCell()
            Created.Text = Item("Created").ToString()
    
            Dim Modified As New TableCell()
            Modified.Text = Item("Modified").ToString()
    
            Dim DataRow As New TableRow()
            DataRow.Cells.Add(ItemName)
            DataRow.Cells.Add(Created)
            DataRow.Cells.Add(Modified)
    
            Table1.Rows.Add(DataRow)
        Next Item
    End Sub
    
    private void CreateResultsTable(ArrayList resultsList)
    {
        string currentList = "";
        string currentSite = "";
        Table1.Rows.Clear();
    
        foreach (SPListItem item in resultsList)
        {
            if (item.ParentList.ParentWeb.Title != currentSite)
            {
                currentSite = item.ParentList.ParentWeb.Title;
    
                TableCell newSiteCell = new TableCell();
                newSiteCell.Text = currentSite;
    
                TableRow newSiteRow = new TableRow();
                newSiteRow.Cells.Add(newSiteCell);
                newSiteRow.Font.Bold = true;
                newSiteRow.Font.Size = FontUnit.Larger;
                newSiteRow.Font.Underline = true;
    
                Table1.Rows.Add(newSiteRow);
            }
            if (item.ParentList.Title != currentList)
            {
                currentList = item.ParentList.Title;
                TableCell newListCell = new TableCell();
                newListCell.Text = currentList;
    
                TableRow newListRow = new TableRow();
                newListRow.Cells.Add(newListCell);
                newListRow.Font.Bold = true;
    
                Table1.Rows.Add(newListRow);
    
                TableCell itemHeading = new TableCell();
                itemHeading.Text = "Item";
                itemHeading.Font.Italic = true;
    
                TableCell createdHeading = new TableCell();
                createdHeading.Text = "Created";
                createdHeading.Font.Italic = true;
    
                TableCell modifiedHeading = new TableCell();
                modifiedHeading.Text = "Last Modified";
                modifiedHeading.Font.Italic = true;
    
                TableRow headingRow = new TableRow();
                headingRow.Cells.Add(itemHeading);
                headingRow.Cells.Add(createdHeading);
                headingRow.Cells.Add(modifiedHeading);
    
                Table1.Rows.Add(headingRow);
            }
    
            TableCell itemName = new TableCell();
            HyperLink itemLink = new HyperLink();
            try
            {
                itemLink.href = item.ParentList.ParentWeb.Url + "/" +
                    item.ParentList.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url +
                    "?ID=" + item.ID;
            }
            catch (Exception)
            {
                // Some items might not have a form page. Ignore the exception.
            }
            itemLink.Text = item.DisplayName;
            itemName.Controls.Add(itemLink);
    
            TableCell created = new TableCell();
            created.Text = item["Created"].ToString();
    
            TableCell modified = new TableCell();
            modified.Text = item["Modified"].ToString();
    
            TableRow dataRow = new TableRow();
            dataRow.Cells.Add(itemName);
            dataRow.Cells.Add(created);
            dataRow.Cells.Add(modified);
    
            Table1.Rows.Add(dataRow);
        }
    }
    

测试应用程序页

在运行项目时,SharePoint 网站将打开,并显示应用程序页。

测试应用程序页

  1. 在**“解决方案资源管理器”中,右击该应用程序页,然后单击“设为启动项目”**。

  2. 按 F5。

    SharePoint 网站将打开。 此时将显示该应用程序页。

  3. 在该页上单击**“由我修改”**选项。

    此时将刷新该应用程序页,并显示您在服务器场中的所有网站中修改的所有项。

  4. 在该页上单击**“由我创建”**选项。

    此时将刷新该应用程序页,并显示您在服务器场中的所有网站中创建的所有项。

后续步骤

有关 SharePoint 应用程序页的更多信息,请参见为 SharePoint 创建应用程序页

通过使用以下主题中介绍的 Visual Web Designer,可以了解有关如何设计 SharePoint 页内容的更多内容:

请参见

任务

如何:创建应用程序页

其他资源

Application _layouts Page Type