实例313 带记忆的在线影片欣赏
实例说明
在网络中,带记忆的在线影片欣赏是指系统会自动记录每次用户观看的影片类型,当用户再次访问时,系统会根据记录的信息设置默认的影片类型,用户可以选择自己喜欢的电影在线观看。运行本实例,在用户登录页面中输入正确的用户名和密码进入到影片列表显示页面,该页面会根据用户单击某类电影的点击率来自动设置默认的电影类别,用户也可以在选择想要观看的影片类型后,单击【播放】按钮,显示该类别的影片列表,单击【播放】按钮可在线观看电影。实例运行结果如图13.26所示。
|
| 图13.26 带记忆的在线影片欣赏 |
技术要点
实现带记忆的在线影片播放欣赏关键是记录用户访问某个影片类型的次数。首先在用户访问某个类别中的影片时,系统自动将该影片加1,并将该用户该类型的访问次数加1,然后在每次用户登录时,通过检索数据库中该用户的数据,设置该用户登录后的影片类型。
实现过程
(1)新建1个网站,将其命名为Ex13_26,默认主页名为Default.aspx,添加1个新Web窗体,将其命名为Register.aspx,以注册新用户,再添加1个新Web窗体,将其命名为Player.aspx,以播放影片,最后添加1个新Web窗体,将其命名为ShowMovie.aspx,在该页面中添加1个DataList控件,以显示影片列表。
(2)Default.aspx页面中的控件及用途如表13.13所示。
表13.13 Default.aspx页面控件列表
|
控 件 类 型 |
控 件 名 称 |
用 途 |
|
HTML/Table |
table |
页面布局 |
|
标准/TextBox |
TextBox1/TextBox2 |
输入用户名/输入密码 |
|
标准/ RequiredFieldValidator |
RequiredFieldValidator1 |
检验TextBox1文本框是否为空 |
|
RequiredFieldValidator2 |
检验TextBox2文本框是否为空 |
|
标准/Button |
Button1 |
验证登录 |
|
Button2 |
转到注册页面 |
为了使数据能够显示,在ShowMovie.aspx页面的DataList控件中添加下列控件来布局,控件及用途如表13.14所示。
表13.14 DataList控件内部列表
|
控 件 类 型 |
控 件 名 称 |
用 途 |
|
HTML/Table |
table |
布局DataList |
|
标准/RadioButtonList |
RadioButtonList1 |
显示影片类型 |
|
标准/GridView |
GridView1 |
显示影片列表 |
|
标准/Button |
Button1 |
执行搜索操作 |
(3)用户身份验证成功后,会转向ShowMovie.aspx页面,该页面显示影片列表,并通过检索数据库中的数据来设置默认电影列表选项,关键代码如下:
protected void Page_Load(object sender, EventArgs e) { if (Session["UserName"] == null) { Response.Redirect("Default.aspx"); } if (!IsPostBack) { SqlConnection Con = new SqlConnection(ConfigurationManager. AppSettings["SQLCON"]); Con.Open( ); string cmdtxt = "SELECT * FROM tb_25_1 WHERE UserName='" + Session["UserName"].ToString( ) + "'"; SqlCommand Com = new SqlCommand(cmdtxt, Con); SqlDataReader dr1 = Com.ExecuteReader( ); dr1.Read( ); if (dr1.HasRows) { int[] count = new int[] { Convert.ToInt32(dr1["KB"]), Convert.ToInt32(dr1["KH"]) ,Convert.ToInt32(dr1["AQ"]),Convert.ToInt32(dr1["DZ"]), Convert.ToInt32(dr1["XJ"]) ,Convert.ToInt32(dr1["QT"])}; dr1.Close( ); //找出数组中最大的数据,并获取其在数组中的位置 int Maxval = count[0]; int maxDefault = 0; for (int i = 1; i < count.Length; i++) { if (count[i] > Maxval) { Maxval = count[i]; maxDefault = i; } } //根据条件设置控件的默认选项 this.RadioButtonList1.SelectedDefault = maxDefault; string[] MovieName = new string[] { "恐怖片", "科幻片", "爱情片", "动作片", "喜剧片", "其他" }; string SqlStr = "SELECT * FROM tb_25_2 WHERE type='" + MovieName[maxDefault] + "'"; SqlDataAdapter da = new SqlDataAdapter(SqlStr, Con); DataSet ds = new DataSet( ); da.Fill(ds); this.GridView1.DataSource = ds; this.GridView1.DataKeyNames = new string[] { "ID" }; this.GridView1.DataBind( ); } Con.Close( ); } } |
单击ShowMovie.aspx页面的GridView控件相应列中的“播放”超级链接,转向Player.aspx页面,播放相应的电影并更新数据库中相应字段的数据,关键代码如下:
protected void Page_Load(object sender, EventArgs e) { if (Session["UserName"] == null) { Response.Redirect("Default.aspx"); } string sqlstr = "SELECT * FROM tb_25_2 WHERE ID="+Request. QueryString["ID"]+""; SqlConnection Con = new SqlConnection(ConfigurationManager. AppSettings["SQLCON"]); Con.Open( ); SqlCommand Com = new SqlCommand(sqlstr, Con); SqlDataReader dr = Com.ExecuteReader( ); dr.Read( ); if (dr.HasRows) { name = dr["SRC"].ToString( ); type = dr["type"].ToString( ); //更新数据库中当前项的点击次数,每点击一次加1 int hitcount = Convert.ToInt32(dr["HitCount"].ToString( ))+1; dr.Close( ); string cmdtxt = "UPDATE tb_25_2 SET HitCount='" + hitcount + "' WHERE ID=" + Request.QueryString["ID"]; Com = new SqlCommand(cmdtxt, Con); try { Com.ExecuteNonQuery( ); } catch (Exception ms) { Response.Write(ms.Message); } } //给前台中绑定的变量赋值 Name = "http://" + Request.ServerVariables["LOCAL_ADDR"] + "/Video/" + name; string cmdtxt2 = "SELECT * FROM tb_25_1 WHERE UserName='" +Session["UserName"].ToString( )+"'"; Com = new SqlCommand(cmdtxt2,Con); SqlDataReader dr1 = Com.ExecuteReader( ); dr1.Read( ); if (dr1.HasRows) { //设置数组存放影片类型 count = new int[] { Convert.ToInt32(dr1["KB"]), Convert.ToInt32(dr1["KH"]) ,Convert.ToInt32(dr1["AQ"]),Convert.ToInt32(dr1["DZ"]), Convert.ToInt32(dr1["XJ"]) ,Convert.ToInt32(dr1["QT"])}; dr1.Close( ); switch(type) { case "恐怖片": count[0] = count[0] + 1; type1 = "KB"; m = 0; break; case "科幻片": count[1] = count[1] + 1; type1 = "KH"; m = 1; break; case "爱情片": count[2] = count[2] + 1; type1 = "AQ"; m = 2; break; case "动作片": count[3] = count[3] + 1; type1 = "DZ"; m = 3; break; case "喜剧片": count[4] = count[4] + 1; type1 = "XJ"; m = 4; break; case "其他": count[5] = count[5] + 1; type1 = "QT"; m = 5; break; default: Response.Write("<script>alert('没有该类型!'); location='ShowMovie.aspx'</script>"); break; } //动态更新数据库中相应字段的点击次数 string cmdtxt3 = "UPDATE tb_25_1 SET "+type1+"='" + count[m] + "' WHERE UserName='" + Session["UserName"]. ToString( ) + "'"; Com = new SqlCommand(cmdtxt3, Con); try { Com.ExecuteNonQuery( ); } catch (Exception ms) { Response.Write(ms.Message); } } Con.Close( ); } |
举一反三
根据本实例,读者可以:
制作一个循环播放带记忆的视频文件播放器;
制作一个带历史信息的视频播放器。
【责任编辑:
夏书 TEL:(010)68476606】