Web网络编程第六次试验:网站设计

前言

为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!

一、实验目的

1.掌握建立和使用用户控件的方法。
2.掌握母版页和内容页的建立方法。
3.掌握主题的建立和使用方法。
4.理解网站地图文件的结构并能合理建立网站地图。
5.掌握网站导航控件SiteMapPath、TreeView和Menu的用法。
6.掌握母版页中网站控件的用法。

二、实验环境

Visual Studio 2019 ASP.Net Framework

三、实验内容

1、在实验5的基础上设计并实现“商品分类列表”用户控件。该用户控件用于显示商品分类及每个分类中包含的商品数量,其中商品分类名显示为超链接,浏览效果如图1所示。
在这里插入图片描述
图1 “商品分类列表”用户控件浏览效果
2、创建母版页。基于母版页且不额外添加其他信息的内容页浏览效果如图2所示。
在这里插入图片描述
图2 基于母版页且不额外添加其他信息的内容页浏览效果
在图2中,“您的位置:”和“Copyright 2018 MyPetShop”之间包含左右两个ContentPlaceHolder控件。
3、利用母版页重新设计MyPetShop应用程序首页。在实验5的基础上进行修改,浏览效果如图3所示。
在这里插入图片描述
图3 基于母版页的MyPetShop应用程序首页浏览效果
4、构建MyPetShop应用程序的网站地图文件,要求包含于网站地图中的页面层次结构如图4所示。
在这里插入图片描述
图4 页面层次结构
5、修改母版页实现面包屑导航功能。在母版页中的“您的位置:”栏添加面包屑导航功能。

四、代码及截图

1.“商品分类列表”用户控件:
创建Category.ascx文件,源代码如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Category.ascx.cs" Inherits="UserControl_WebUserControl" %>
<asp:GridView ID="gvCategory" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" Width="100%">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Image ID="imgArrow" runat="server" ImageUrl="~/Images/arrow.gif"/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:HyperLinkField DataNavigateUrlFields="CategoryId" DataNavigateUrlFormatString="~/ProShow.aspx?CategoryId={0}" DataTextField="Name" HeaderText="分类名称" />
        <asp:TemplateField>
                <HeaderStyle HorizontalAlign="Center" Width="90px" />
                <headerTemplate>商品数量</headerTemplate>
                <ItemStyle HorizontalAlign="Center" Width="90px" />
           <ItemTemplate>  
                <asp:Label ID="lblCount" runat="server"                     Text='<%#GetProductCountByCategoryId(Eval("CategoryId").ToString()) %>'></asp:Label>
                </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

设计界面如下所示:
在这里插入图片描述

Category.asax.cs代码如下所示:

using System;
using MyPetShop.BLL;
public partial class UserControl_WebUserControl : System.Web.UI.UserControl
{
    CategoryService categorySrv = new CategoryService();

    protected void Page_Load(object sender, EventArgs e)
    {
        gvCategory.DataSource = categorySrv.GetAllCategory();
        gvCategory.DataBind();
    }

    protected string GetProductCountByCategoryId(string id)
    {
        return "(" + categorySrv.GetProductCountByCategoryId(int.Parse(id)).ToString() + ")";
    }
}

2.创建母版页
创建MasterPage.master文件,其源代码如下:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
    <link href="Styles/bootstrap.css" rel="stylesheet" type="text/css" />
    <link href="Styles/Style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <header class="header">
             <asp:Image ID="imgLogo" runat="server" ImageUrl="~/Images/logo.gif" />
      <ul class="nav nav-pills">
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnDefault" runat="server" CausesValidation="False" ForeColor="White" PostBackUrl="~/Default.aspx">首页</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnRegister" runat="server" CausesValidation="False" ForeColor="White" OnClick="LnkbtnRegister_Click" >注册</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnLogin" runat="server" CausesValidation="False" ForeColor="White" OnClick="LnkbtnLogin_Click" >登录</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnCart" runat="server" CausesValidation="False" ForeColor="White" >购物车</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnSiteMap" runat="server" CausesValidation="False" ForeColor="White" PostBackUrl="~/SiteMapTest.aspx">网站地图</asp:LinkButton></li>
      </ul>
      <div class="status">
        <asp:Label ID="lblWelcome" runat="server" Text="您还未登录!"></asp:Label>
        <asp:LinkButton ID="lnkbtnPwd" runat="server" CausesValidation="False" ForeColor="White" Visible="False" PostBackUrl="~/ChangePwd.aspx">密码修改</asp:LinkButton>
        <asp:LinkButton ID="lnkbtnManage" runat="server" ForeColor="White" Visible="False" PostBackUrl="~/Admin/Default.aspx">系统管理</asp:LinkButton>
        <asp:LinkButton ID="lnkbtnOrder" runat="server" CausesValidation="False" ForeColor="White" Visible="False" PostBackUrl="~/OrderList.aspx">购物记录</asp:LinkButton>
        <asp:LinkButton ID="lnkbtnLogout" runat="server" CausesValidation="False" ForeColor="White" Visible="False" OnClick="LnkbtnLogout_Click" >退出登录</asp:LinkButton>
      </div>
    </header>
    <nav class="sitemap">
      您的位置:     
        <asp:SiteMapPath ID="SiteMapPath1" runat="server">
        </asp:SiteMapPath>
    </nav>
        <section class="mainbody">
            <div class="leftside">
                <asp:ContentPlaceHolder ID="cphLeft" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
            <div class="rightside">
                <asp:ContentPlaceHolder ID="cphRight" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
            <%-- 下面div元素左右两侧均不允许其他浮动元素,并显示分割线 --%>
            <div class="clear"></div>
            </section>
            <footer class="footer">
                Copyright 2018 MyPetShop
                </footer>
    </form>
</body>
</html>

其设计界面如下:
在这里插入图片描述

MasterPage.master.cs代码如下:

using System;
public partial class MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["CustomerId"] != null)   //一般用户登录
        {
            lblWelcome.Text = "您好," + Session["CustomerName"].ToString();
            lnkbtnPwd.Visible = true;
            lnkbtnOrder.Visible = true;
            lnkbtnLogout.Visible = true;
        }
    }
    protected void LnkbtnRegister_Click(object sender, EventArgs e)
    {
        Session.Clear();  //注销当前用户
        Response.Redirect("~/NewUser.aspx");
    }
    protected void LnkbtnLogin_Click(object sender, EventArgs e)
    {
        Session.Clear();  //注销当前用户
        Response.Redirect("~/Login.aspx");
    }
    protected void LnkbtnLogout_Click(object sender, EventArgs e)
    {
        Session.Clear();  //注销当前用户
        Response.Redirect("~/Default.aspx");
    }
}

3.重新设计的MyPetShop应用程序首页
创建Default.aspx,其源代码如下所示:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@Register Src="~/UserControl/Category.ascx" TagPrefix="ucl" TagName="Category" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cphLeft" Runat="Server">
    <ucl:Category runat="server" ID="Category" />
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="cphRight" Runat="Server">
     <asp:GridView ID="gvProduct" runat="server" AllowPaging="True"  
                AutoGenerateColumns="False"
                PagerSettings-Mode="NextPrevious" PageSize="1" Width="100%" 
                OnPageIndexChanging="GvProduct_PageIndexChanging" >
                <PagerSettings FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PreviousPageText="上一页" Mode="NextPrevious" Position="TopAndBottom" />
                <Columns>                    
                    <asp:TemplateField>
                        <ItemTemplate>
                            <table style="border:1px solid #808080;width:100%">
                                <tr>
                                    <td style="text-align:center;border:1px;vertical-align:middle;width:40%" rowspan="7">
                                        <asp:Image ID="imgProduct" runat="server" imageUrl='<%# Bind("Image") %>' Height="60px" Width="60px"/>
                                    </td>
                                    <td style="border:1px solid #808080;">商品名称:</td>
                                    <td style="border:1px solid #808080;">
                                        <asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="border:1px solid #808080;">商品价格:</td>
                                    <td style="border:1px solid #808080;">
                                        <asp:Label ID="lblListPrice" runat="server" Text='<%# Bind("ListPrice") %>'></asp:Label>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="border:1px solid #808080;">商品描述:</td>
                                    <td style="border:1px solid #808080;">
                                        <asp:Label ID="lblDecsn" runat="server" Text='<%# Bind("Descn") %>'></asp:Label>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="border:1px solid #808080;">库存:</td>
                                    <td style="border:1px solid #808080;">
                                        <asp:Label ID="lblQty" runat="server" Text='<%# Bind("Qty") %>'></asp:Label>
                                    </td>
                                </tr>
                            </table>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:HyperLinkField DataNavigateUrlFields="ProductId"
                        DataNavigateUrlFormatString="~/ShopCart.aspx?ProductId={0}" 
                        HeaderText="放入购物车" Text="购买" />
                </Columns>
            </asp:GridView>
</asp:Content>

其设计界面如下:
在这里插入图片描述

Default.aspx.cs如下:

using System;
using System.Web.UI.WebControls;
using MyPetShop.BLL;
public partial class _Default : System.Web.UI.Page
{
    ProductService productSrv = new ProductService();
    protected void Page_Load(object sender, EventArgs e)
    {
        Bind();
    }
    protected void Bind()
    {
        gvProduct.DataSource = productSrv.GetAllProduct();
        gvProduct.DataBind();
    }
    protected void GvProduct_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvProduct.PageIndex = e.NewPageIndex;
        Bind();
    }
}

4.构建MyPetShop应用程序的网站地图文件
创建站点地图文件Web.sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
	<siteMapNode url="~/Default.aspx" title="首页"  description="首页">
		<siteMapNode url="~/NewUser.aspx" title="注册"  description="注册" />
		<siteMapNode url="~/Login.aspx" title="登录"  description="登录" />
		<siteMapNode url="~/OrderList.aspx" title="购物记录"  description="购物记录" />
		<siteMapNode url="~/ChangePwd.aspx" title="更改密码"  description="更改密码" />
		<siteMapNode url="~/GetPwd.aspx" title="重置密码"  description="重置密码" />
		<siteMapNode url="~/ProShow.aspx" title="商品展示"  description="商品展示" />
		<siteMapNode url="~/ShopCart.aspx" title="购物车"  description="购物车">
			<siteMapNode url="~/SubmitCart.aspx" title="订单提交"  description="订单提交" />
		</siteMapNode>
		<siteMapNode url="~/Map.aspx" title="网站地图"  description="网站地图" />
	</siteMapNode>
</siteMap>

创建PetTree.asax,其源代码如下:

<asp:TreeView ID="tvProducts" runat="server" ExpandDepth="0">
    <Nodes>
        <asp:TreeNode SelectAction="None" Text="分类商品" Value="分类商品"></asp:TreeNode>
    </Nodes>
</asp:TreeView>
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PetTree.ascx.cs" Inherits="UserControl_PetTree" %>

其设计界面如下:
在这里插入图片描述

PetTree.asax.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MyPetShop.BLL;

public partial class UserControl_PetTree : System.Web.UI.UserControl
{
    CategoryService CategorySrv = new CategoryService();
    ProductService ProductSrv = new ProductService();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //调用自定义方法BindTree()将所有的商品分类添加到TreeView控件tvProducts的父节点中
            BindTree();
        }
    }

    protected void BindTree()
    {
        var categories = CategorySrv.GetAllCategory();
        foreach (var category in categories)
        {
            //将一个商品分类添加到TreeView控件tvProducts的父节点中
            TreeNode treeNode = new TreeNode
            {
                Text = category.Name,
                Value = category.CategoryId.ToString(),
                NavigateUrl = "~/ProShow.aspx?CategoryId=" + category.CategoryId.ToString()
            };
            tvProducts.Nodes.Add(treeNode);
            //调用自定义方法BindTreeChild()将指定分类号下的所有商品添加到该分类节点下
            BindTreeChild(treeNode, category.CategoryId);
        }
    }

    protected void BindTreeChild(TreeNode tn, int categoryId)
    {
        var products = ProductSrv.GetProductByCategoryId(categoryId);
        //
        foreach (var product in products)
        {
            TreeNode treeNode = new TreeNode()
            {
                Text = product.Name,
                Value = product.ProductId.ToString(),
                NavigateUrl = "~/ProShow.aspx?ProductId=" + product.ProductId.ToString()
            };
            tn.ChildNodes.Add(treeNode);
        }
    }
}

创建SiteMapTest.aspx,其源代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SiteMapTest.aspx.cs" Inherits="SiteMapTest" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1">
            </asp:TreeView>
            <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
        </div>
    </form>
</body>
</html>

其设计界面如下:
在这里插入图片描述

SiteMapTest.aspx.cs如下:

using System;
public partial class SiteMapTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

5.修改母版页实现面包屑导航功能
MasterPage.master源代码如下:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
    <link href="Styles/bootstrap.css" rel="stylesheet" type="text/css" />
    <link href="Styles/Style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <header class="header">
             <asp:Image ID="imgLogo" runat="server" ImageUrl="~/Images/logo.gif" />
      <ul class="nav nav-pills">
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnDefault" runat="server" CausesValidation="False" ForeColor="White" PostBackUrl="~/Default.aspx">首页</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnRegister" runat="server" CausesValidation="False" ForeColor="White" OnClick="LnkbtnRegister_Click" >注册</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnLogin" runat="server" CausesValidation="False" ForeColor="White" OnClick="LnkbtnLogin_Click" >登录</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnCart" runat="server" CausesValidation="False" ForeColor="White" >购物车</asp:LinkButton></li>
        <li class="navDark">
          <asp:LinkButton ID="lnkbtnSiteMap" runat="server" CausesValidation="False" ForeColor="White" PostBackUrl="~/SiteMapTest.aspx">网站地图</asp:LinkButton></li>
      </ul>
      <div class="status">
        <asp:Label ID="lblWelcome" runat="server" Text="您还未登录!"></asp:Label>
        <asp:LinkButton ID="lnkbtnPwd" runat="server" CausesValidation="False" ForeColor="White" Visible="False" PostBackUrl="~/ChangePwd.aspx">密码修改</asp:LinkButton>
        <asp:LinkButton ID="lnkbtnManage" runat="server" ForeColor="White" Visible="False" PostBackUrl="~/Admin/Default.aspx">系统管理</asp:LinkButton>
        <asp:LinkButton ID="lnkbtnOrder" runat="server" CausesValidation="False" ForeColor="White" Visible="False" PostBackUrl="~/OrderList.aspx">购物记录</asp:LinkButton>
        <asp:LinkButton ID="lnkbtnLogout" runat="server" CausesValidation="False" ForeColor="White" Visible="False" OnClick="LnkbtnLogout_Click" >退出登录</asp:LinkButton>
      </div>
    </header>
    <nav class="sitemap">
      您的位置:     
        <asp:SiteMapPath ID="SiteMapPath1" runat="server">
        </asp:SiteMapPath>
    </nav>
        <section class="mainbody">
            <div class="leftside">
                <asp:ContentPlaceHolder ID="cphLeft" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
            <div class="rightside">
                <asp:ContentPlaceHolder ID="cphRight" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
            <%-- 下面div元素左右两侧均不允许其他浮动元素,并显示分割线 --%>
            <div class="clear"></div>
            </section>
            <footer class="footer">
                Copyright 2018 MyPetShop
                </footer>
    </form>
</body>
</html>

其设计界面如下:
在这里插入图片描述

实验运行截图:
在这里插入图片描述

单击网站地图:
在这里插入图片描述

回到首页,单击任意商品,面包屑导航随之更改:
在这里插入图片描述

单击登录,面包屑导航随之更改:
在这里插入图片描述
在这里插入图片描述

五、实验总结

通过本次实验,我简要掌握了建立和使用用户控件的方法、简要掌握了母版页和内容页的建立方法、简要掌握了主题的建立和使用方法、简要理解了网站地图文件的结构并能合理建立网站地图、简要掌握了网站导航控件SiteMapPath、TreeView和Menu的用法、简要掌握了母版页中网站控件的用法。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight_V_Schumacher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值