此文是小白在学习张晨光老师的视频教学<<Asp.Net WEB服务器编程技术>>中做的学习笔记,一些知识点也是跟着教程走的,大家也可以去老师的主页去学习,谢谢大家.
这一篇要练习的是,如下课程的代码:
右击项目/添加/新建项:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Musci_Menu.master.cs" Inherits="MyMusci.Musci_Menu" %> <!DOCTYPE html> <html> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <!--这里引用bootstrap5--> <link href="bootstrap-5.1.3-dist/css/bootstrap.css" rel="stylesheet" /> <script src="bootstrap-5.1.3-dist/js/bootstrap.bundle.js"></script> <script src="js/jquery.js"></script> <!--下面控件是将子页面的js引用至项目--> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> <!--一些样式设置--> <style> .img { height:126px; width:126px; } /*导航栏渐变色*/ .bg-linear { background:-webkit-linear-gradient(#ffffff,#63B8FF) } /*排行榜渐变色*/ .Repeater { width:200px; padding:50px; margin:10px; display:inline-block; background: linear-gradient(to bottom right ,#1E90FF,#FFC0CB, #FF69B4); border-radius: 25px; } /*歌曲推荐每首歌的样式*/ .recommend { display:inline-flex; width:400px; } </style> <script> /*实现母版导航栏按钮点击的方法,只要传入他的ID即可*/ btn_active = function (str) { $("ul").find("a").removeClass("active"); $("#" + str).addClass("active"); } </script> </head> <body> <form id="form1" runat="server"> <div> <div class="container-fluid"> <!--导航栏--> <header class="d-flex justify-content-center py-3 bg-linear justify-content-lg-start"> <!--图片及音乐软件名称--> <img alt="" src="img/music.png" style="width:50px;height:50px;margin-left:20px;margin-right:10px" /><span style="font-size:30px;color:#0a58ca;margin-right:150px;">薄雾音乐</span> <ul class="nav nav-pills"> <li class="nav-item"><a href="main.aspx" class="nav-link" id="main" >发现音乐</a></li> <li class="nav-item"><a href="#" class="nav-link ">我的主页</a></li> <li class="nav-item"><a href="user_center.aspx" class="nav-link" id="center">个人中心</a></li> <li class="nav-item"><a href="#" class="nav-link ">FAQs</a></li> <li class="nav-item"><a href="#" class="nav-link ">About</a></li> </ul> </header> </div> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> <!--固定在底部的栏位--> <div style="width:100%;background-color:#363636;color:white;text-align:center;position:fixed;bottom:0;"> Copyright ©2021-2022 小白. 保留所有权利 </div> </div> </form> </body> </html>
右击项目/添加/新建项:
然后选择我们刚刚创建的母版页:
然后我们将Home.aspx里的代码转移至user_center.aspx里:前端
<%@ Page Title="" Language="C#" MasterPageFile="~/Musci_Menu.Master" AutoEventWireup="true" CodeBehind="User_Center.aspx.cs" Inherits="MyMusci.User_Center" %> <!--这里可独立于母版页放置一些js或css--> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <!--此控件下放置内容--> <div class="container-fluid"> <table class="table"> <tbody> <tr> <td>账号</td> <td><asp:Label ID="userId" runat="server"></asp:Label></td> <td rowspan="3"><asp:Image ID="userPhoto" runat="server" CssClass="img" /> <br /> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="btnUpload_Click" /> </td> </tr> <tr> <td>昵称</td> <td><asp:TextBox ID="userNetname" runat="server"></asp:TextBox></td> </tr> <tr> <td>性别</td> <td><asp:DropDownList ID="userSex" runat="server"> <asp:ListItem Value="true">男</asp:ListItem> <asp:ListItem Value="false">女</asp:ListItem> </asp:DropDownList> </td> </tr> <tr> <td>签名</td> <td><asp:TextBox ID="userSign" runat="server" Height="101px" TextMode="MultiLine"></asp:TextBox></td> </tr> <tr> <td>年龄</td> <td><asp:TextBox ID="userAge" runat="server"></asp:TextBox></td> </tr> </tbody> </table> <asp:Button ID="sub_Btn" runat="server" Text="编辑" class="btn btn-primary" OnClick="sub_Btn_Click" /> </div> <script> btn_active("center"); </script> </asp:Content>
后端:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; using System.Data; using Model; namespace MyMusci { public partial class User_Center : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //防止用户直接进入用户中心 if (Session["userName"] == null) { Response.Redirect("login_new.aspx"); } else { //将数据库中的值赋值于页面的控件中 if (!IsPostBack) { GetUser(); } } } private void GetUser() { //读取Session,从数据库中获取相应的数据 string nameid = Session["userName"].ToString(); string sql = "select * from user_all where user_Name=?userName"; Hashtable ht = new Hashtable(); ht.Add("userName", nameid); DataTable dt = ToolMysqlDate.executTable(sql, ht); userId.Text = nameid; userNetname.Text = dt.Rows[0]["u_nick"].ToString(); //下拉列表选中FindByValue,则时要选中的value值 //将数据库返回的BOOL值转换字符串后,再判断哪一项被选中 userSex.Items.FindByValue(dt.Rows[0]["u_sex"].ToString() == "True" ? "true" : "false").Selected = true; userSign.Text = dt.Rows[0]["u_sign"].ToString(); userAge.Text = dt.Rows[0]["u_age"].ToString(); userPhoto.ImageUrl = dt.Rows[0]["u_photo"].ToString(); } //上传图片按钮点击事件 protected void btnUpload_Click(object sender, EventArgs e) { //判断是否有图片 if (FileUpload1.HasFile) { //获取文件名 string imgName = FileUpload1.FileName; //添加时间参数,可以规避掉图片重名问题 imgName = DateTime.Now.ToString("yyyymmddhhmmss") + imgName; //图片上传的地址(路径) FileUpload1.SaveAs(Server.MapPath("\\user_img\\") + imgName); //显示到图片框上 userPhoto.ImageUrl = "\\user_img\\" + imgName; } else { Response.Write("<script>alert('需要先选择图片,再上传')</script>"); } } //编辑按钮提交事件 protected void sub_Btn_Click(object sender, EventArgs e) { //修改数据库中的值 string sql = "update user_all set " + "u_Nick=?u_Nick,u_sex=?u_sex,u_Sign=?u_Sign,u_age=?u_age,u_photo=?u_photo " + "where user_name=?user_name"; DataUser us = new DataUser(); //给中间实体类赋值 us.user_name = userId.Text; us.u_Nick = userNetname.Text; //判断下拉列表选中的数据,并提取,然后将其转换为int 类型,1为True,0为False us.u_sex = userSex.SelectedValue == "true" ? 1 : 0; us.u_Sign = userSign.Text; us.u_age = Convert.ToInt32(userAge.Text); us.u_photo = userPhoto.ImageUrl; Hashtable ht = new Hashtable(); //参数的赋值 ht.Add("user_name", us.user_name); ht.Add("u_Nick", us.u_Nick); ht.Add("u_sex", us.u_sex); ht.Add("u_Sign", us.u_Sign); ht.Add("u_age", us.u_age); ht.Add("u_photo", us.u_photo); //调用增删改方法 int result = ToolMysqlDate.executeSql(sql, ht); //向用户提示信息 if (result > 0) { Response.Write("<script>alert('信息修改成功')</script>"); } else { Response.Write("<script>alert('信息修改失败')</script>"); } } } }
这样我们在登录后,会得到如下的个人中心界面(ps:登录界面的路径需要大家修改一下):
我们同样使用包含母版页的web窗体来创建发现音乐,创建完毕后,填入如下代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Musci_Menu.Master" AutoEventWireup="true" CodeBehind="Main.aspx.cs" Inherits="MyMusci.Main" %> <!--这里可独立于母版页放置一些js或css--> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <!--内容区域--> <div class="container"> <div style="background-color:gainsboro"> <span class="text-center" style="font-size:30px;">歌曲推荐</span><br /> <div class="tab-content row"> <div id="home" class="container tab-pane active" style="align-content:center;"><br> <%--这里放置asp:Repeater 控件,读取数据库数据--%> <asp:Repeater ID="Repeater5" runat="server"> <ItemTemplate> <%--这里采用特殊样式--%> <div class="col recommend"> <img src="<%# Eval("m_photo") %>"" style="width:125px;height:125px" /> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %><%# Eval("m_name") %></p><p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> <div id="menu1" class="container tab-pane fade"><br> <asp:Repeater ID="Repeater6" runat="server"> <ItemTemplate> <div class="col recommend"> <img src="img/music.png" style="width:125px;height:125px" /> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %><%# Eval("m_name") %></p><p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> <div id="menu2" class="container tab-pane fade"><br> <asp:Repeater ID="Repeater7" runat="server"> <ItemTemplate> <div class="col recommend"> <img src="img/music.png" style="width:125px;height:125px" /> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %><%# Eval("m_name") %></p><p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> </div> <%--这里是歌曲推荐下方的按钮,点击可以切换下一页推荐歌曲--%> <div class="d-flex justify-content-center"> <ul class="nav nav-pills" role="tablist"> <li class="nav-item"> <a class="nav-link active" data-bs-toggle="pill" href="#home">.</a> </li> <li class="nav-item"> <a class="nav-link" data-bs-toggle="pill" href="#menu1">.</a> </li> <li class="nav-item"> <a class="nav-link" data-bs-toggle="pill" href="#menu2">.</a> </li> </ul> </div> </div> <!--热歌榜数据--> <div class="row"> <div class="col Repeater"> <span style="font-size:30px;align-content:center">热歌榜</span><p></p> <!--同样使用aspx控件来填充数据--> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <div class="row"> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %> <%# Eval("m_name") %></p> <p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> <div class="col Repeater"> <span style="font-size:30px;align-content:center">治愈榜</span><p></p> <asp:Repeater ID="Repeater2" runat="server"> <ItemTemplate> <div class="row"> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %> <%# Eval("m_name") %></p> <p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> <div class="col Repeater"> <span style="font-size:30px;align-content:center">国风榜</span><p></p> <asp:Repeater ID="Repeater3" runat="server"> <ItemTemplate> <div class="row"> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %> <%# Eval("m_name") %></p> <p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> <div class="col Repeater"> <span style="font-size:30px;align-content:center">欧美榜</span><p></p> <asp:Repeater ID="Repeater4" runat="server"> <ItemTemplate> <div class="row"> <a href="Musci_Main.aspx?id"> <p><%# Eval("ROWS") %> <%# Eval("m_name") %></p> <p><%# Eval("m_singer") %></p> </a> </div> </ItemTemplate> </asp:Repeater> </div> </div> </div> <script> /*当运行至该页面,导航栏按钮则定位选中该页面的'发现音乐'按钮*/ btn_active("main"); </script> </asp:Content>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace MyMusci { public partial class Main : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bindlist(); } } //向控件填充数据 private void Bindlist() { //rows mysql特殊写法,用于返回序列排序个数 string sql = "SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t,"+ "(SELECT @rownum:=0)t1 ORDER BY m_clicknum DESC LIMIT 5 "; //填充热歌榜的数据 Repeater1.DataSource = ToolMysqlDate.executTable(sql); Repeater1.DataBind(); Repeater2.DataSource = ToolMysqlDate.executTable("SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t ,(SELECT @rownum:=0)t1 WHERE m_type IN (SELECT m_number FROM music_type WHERE m_type='治愈') ORDER BY m_clicknum DESC LIMIT 5"); Repeater2.DataBind(); Repeater3.DataSource = ToolMysqlDate.executTable("SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t ,(SELECT @rownum:=0)t1 WHERE m_type IN (SELECT m_number FROM music_type WHERE m_type='国风') ORDER BY m_clicknum DESC LIMIT 5"); Repeater3.DataBind(); Repeater4.DataSource = ToolMysqlDate.executTable("SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t ,(SELECT @rownum:=0)t1 WHERE m_type IN (SELECT m_number FROM music_type WHERE m_type='欧美') ORDER BY m_clicknum DESC LIMIT 5"); Repeater4.DataBind(); //填充歌曲推荐数据(0-9)(10-18)(19-27) Repeater5.DataSource = ToolMysqlDate.executTable("SELECT t.* FROM (SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t ,(SELECT @rownum:= 0)t1 ORDER BY m_clicknum DESC)t WHERE ROWS BETWEEN(1 - 1)*9 AND(2 - 1) * 9 ORDER BY ROWS "); Repeater5.DataBind(); Repeater6.DataSource = ToolMysqlDate.executTable("SELECT t.* FROM (SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t ,(SELECT @rownum:= 0)t1 ORDER BY m_clicknum DESC)t WHERE ROWS BETWEEN(2 - 1)*9+1 AND(3 - 1) * 9 ORDER BY ROWS "); Repeater6.DataBind(); Repeater7.DataSource = ToolMysqlDate.executTable("SELECT t.* FROM (SELECT @rownum:=@rownum+1 AS ROWS,t.* FROM music t ,(SELECT @rownum:= 0)t1 ORDER BY m_clicknum DESC)t WHERE ROWS BETWEEN(3 - 1)*9+1 AND(4 - 1) * 9 ORDER BY ROWS "); Repeater7.DataBind(); } } }
歌曲推荐部分:
榜单部分:
我们在之前的ToolMysqlDate.cs中添加如下方法:
//不带参数查询 public static DataTable executTable(String sql) { MySqlDataAdapter mda = new MySqlDataAdapter(sql, conn); DataTable dt = new DataTable(); mda.Fill(dt); return dt; }
推荐歌曲的图片存储位置(需要大家手动导入)
对应数据库的内容:
这样,一个比较简陋的音乐主页模块就做好了,谢谢大家