演练:创建应用程序页
“应用程序页”是 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 项目
启动 Visual Studio 2010。
打开**“新建项目”对话框,展开要使用的语言下的“SharePoint”节点,然后单击“2010”**。
在**“Visual Studio 已安装的模板”窗格中,选择“空 SharePoint 项目”。 将该项目命名为“MySharePointProject”,然后单击“确定”**。
这将显示**“SharePoint 自定义向导”**。 使用此向导可以选择用于调试项目的站点以及解决方案的信任级别。
选择**“部署为场解决方案”,然后单击“完成”**以接受默认的本地 SharePoint 网站。
创建应用程序页
若要创建应用程序页,请向该项目添加**“应用程序页”**项。
创建应用程序页
在**“解决方案资源管理器”中,选择“MySharePointProject”**项目。
在**“项目”菜单上,单击“添加新项”**。
在**“添加新项”对话框中,选择“应用程序页”**。
将该页命名为“SearchItems”,然后单击**“添加”**。
Visual Web Developer 设计器将在**“源”**视图中显示应用程序页,您可以在该视图中查看此页的 HTML 元素。 该设计器显示多个 Content 控件的标记。 每个控件均映射到在默认应用程序母版页中定义的 ContentPlaceHolder 控件。
设计应用程序页的布局
通过“应用程序页”项,您可以使用设计器将 ASP.NET 控件添加到应用程序页中。 此设计器即是在 Visual Web Developer 中使用的设计器。 按照任何标准 ASP.NET 页的设计方式,将标签、单选按钮列表和表拖动到设计器的**“源”**视图中,并设置相应属性。
有关使用 Visual Web Developer 中的设计器的更多信息,请参见Visual Web Developer 内容映射。
设计应用程序页的布局
在**“视图”菜单上单击“工具箱”**。
在**“工具箱”的“标准”组中,将“标签”、“DropDownList”和“表”拖到“PlaceHolderMain”**内容控件的主体上。
在设计器中,将标签控件的 Text 特性的值更改为“显示所有项”。
在设计器中,用以下 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 事件。
处理该页上的控件的事件
在**“视图”菜单上单击“代码”**。
应用程序页代码文件随即在代码编辑器中打开。
将以下方法添加到 SearchItems 类中。 此代码通过调用将在本演练的稍后部分中创建的方法,来处理 DropDownList 的 SelectedIndexChanged 事件。
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); }
将以下语句添加到应用程序页代码文件的顶部。
Imports System.Web.UI.WebControls Imports Microsoft.SharePoint.Administration Imports System.Collections
using System.Web.UI.WebControls; using Microsoft.SharePoint.Administration; using System.Collections;
将以下方法添加到 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); }
将以下方法添加到 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 网站将打开,并显示应用程序页。
测试应用程序页
在**“解决方案资源管理器”中,右击该应用程序页,然后单击“设为启动项目”**。
按 F5。
SharePoint 网站将打开。 此时将显示该应用程序页。
在该页上单击**“由我修改”**选项。
此时将刷新该应用程序页,并显示您在服务器场中的所有网站中修改的所有项。
在该页上单击**“由我创建”**选项。
此时将刷新该应用程序页,并显示您在服务器场中的所有网站中创建的所有项。
后续步骤
有关 SharePoint 应用程序页的更多信息,请参见为 SharePoint 创建应用程序页。
通过使用以下主题中介绍的 Visual Web Designer,可以了解有关如何设计 SharePoint 页内容的更多内容: