Download presentation
Presentation is loading. Please wait.
1
讲课人:王璞 浙江工商职业技术学院
2
导航菜单配置 在后台管理的框架集中,可以配置导航菜单进行页面跳转,管理人员可以通过导航菜单进行页面的 管理和跳转操作。当管理员单击导航菜单上的新闻管理时,就应该在主工作区中间显示新闻管理页面而不会刷新其他页面,同样当管理员点击其他操作时,会跳转到不同的页面。 Left.aspx页面代码使用了TreeView控件中节点的NavigateUrl属性配置了单击该节点时应该跳转的页面,并使用了节点的Target属性进行了连接应该跳转的框架集。 注意:在超链接中包含 target 属性,而 TreeView 控件同样包含 Target 属性。在框架集中,需要指定相应的连接所需要跳转的框架,否则跳转的框架会在自身页面中执行。
3
身份验证页面 在管理员操作之前,首先需要进行身份验证,如果管理员是合法的用户,那么系统就能够使管理员进行添加和删除等操作。如果系统验证操作人员不是合法用户,那么就不应该为用户赋予权限,并阻止用户的登录和管理操作。打开登录页面,双击按钮编写相应的登录事件,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) { try SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=news;Integrated Security=True"); con.Open(); //创建连接 string strsql = "select * from admin where admin='" + TextBox1.Text + "' and password='"0 + TextBox2.Text + "'"; SqlDataAdapter da = new SqlDataAdapter(strsql, con); DataSet ds = new DataSet(); int count = da.Fill(ds, "table"); if (count > 0) Session["admin"] = TextBox1.Text; Response.Redirect("default.aspx"); } else Label1.Text = "无法登录,请检查用户名和密码"; //创建 SQL //创建适配器 //创建数据集 //填充数据集 //如果存在用户 //配置一个 Session //页面跳转 //提示无法登录 catch Label1.Text = "无法进行数据连接"; //抛出异常
4
如果相应的 Session 对象为空,就说明正在操作的用户不具备管理权限,则应该跳转到 login.aspx页面进行重新进行登录操作
身份验证页面 上述代码使用了 ADO.NET 中的数据对象进行数据操作,其操作和登录控件一样,在数据库中查询 相应的信息,如果查询的结果大于 0 则说明该查询在数据库中是有效的,也就是说存在这样一个管理员能够进行登录,而如果查询的结果小于 0 则说明不存在相应的管理员。 在管理页面的各个页面都需要进行用户身份判断,当管理员登录成功后,系统会配置一个 Session对象给用户,如果管理员操作超时或者操作者是一个非法用户,那么就没有 Session 对象。在各个页面 判断 Session 对象是否存在,就能够判断是否是合法的管理员,示例代码如下所示。 if (Session["admin"] == null) //如果不为管理员 { Response.Redirect("login.aspx"); //登录跳转 } 如果相应的 Session 对象为空,就说明正在操作的用户不具备管理权限,则应该跳转到 login.aspx页面进行重新进行登录操作
5
新闻发布页面 在新闻发布页面,管理员只需要在相应的字段进行新闻内容的填写,包括新闻的标题、内容、作者 等就能够进行新闻的发布。对于非静态生成的新闻发布而言,只需要进行数据的插入即可,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) { if (Session["admin"] == null) Response.Redirect("login.aspx"); } TextBox2.Text = DateTime.Now.ToString(); protected void Button1_Click(object sender, EventArgs e) try SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=news;Integrated Security=True"); con.Open(); //如果不为管理员 //登录跳转 //初始化字段 //创建连接 //打开连接 string strsql = "insert into news (title,time,author,content,weather,level,hits,classname) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox5.Text + "','" + TextBox4.Text + "','" + DropDownList1.Text + "',0,'" + DropDownList2.Text + "')"; //SQL 语句 SqlCommand cmd = new SqlCommand(strsql, con); //创建 Command cmd.ExecuteNonQuery(); //执行 SQL 语句 Response.Redirect("manage.aspx"); //页面跳转 } catch(Exception ee) { Response.Write(ee.ToString()); //抛出异常 新闻发布页面只需要执行相应的 SQL 语句进行数据插入即可,如果新闻发布只需要进行动态读取, 那么只需要进行静态插入新闻即可,而不需要进行模板解析操作;如果需要生成静态页面,那么就需要进行模板编写再生成纯静态页面。
6
静态生成功能 静态生成听上去非常的复杂,但是其实静态生成非常的简单。当管理员发布一条新闻,就会在数据 库中插入数据,数据插入后就应该解析模板进行静态生成。静态生成的是一个文件,这个文件可以是一个.html 文件或者.shtml 文件。在生成文件之前,可以运行以下代码,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) string str = "<b>*title*</b>"; string database = "新闻标题"; string output = str.Replace("*title*", database); Response.Write(output); } //判断加载 //模板代码 //数据库字段 //替换操作 //输出字符串 上述代码简单的定义了一个模板代码,其中 str 变量被定义为标签,database 变量被定义为新闻标题, 当需要生成静态时,可以将模板中代码的关键字进行替换,例如这里的*title*替换成为 database 变量中 的标签,替换完成后输出替换后的字符串生成即可。在模板代码中,模板代码如下所示。 string str = "<b>*title*</b>"; *title*是定义的标签,用于替换关键字,可替换新闻标题
7
7.4.4 静态生成功能 在了解了静态 生成的原理之后,就能够使用模板解析进行静态生成,示例代码如下所示。
静态生成功能 在了解了静态 生成的原理之后,就能够使用模板解析进行静态生成,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) { try SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=news;Integrated Security=True"); con.Open(); //创建连接 //打开连接 string strsql = "insert into news (title,time,author,content,weather,level,hits,classname) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox5.Text + "','" + TextBox4.Text + "','" + DropDownList1.Text + "',0,'" + DropDownList2.Text + "')"; //SQL 语句 SqlCommand cmd = new SqlCommand(strsql, con); //创建执行对象 cmd.ExecuteNonQuery(); //执行 SQL StreamReader aw = File.OpenText(Server.MapPath("template.htm")); //打开模板 string template = aw.ReadToEnd(); //读取模板 aw.Close(); //关闭对象 template = template.Replace("[新闻标题]", TextBox1.Text); //替换标签 template = template.Replace("[发布时间]", TextBox2.Text); //替换标签 template = template.Replace("[新闻作者]", TextBox3.Text); //替换标签 template = template.Replace("[新闻天气]", TextBox4.Text); //替换标签 template = template.Replace("[新闻内容]", TextBox5.Text); //替换标签 StreamWriter sw = File.CreateText(Server.MapPath("../html/" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Second.ToString() + ".htm")); //生成文件 sw.Write(template); //编写内容 sw.Close(); //关闭对象 Response.Redirect("manage.aspx"); //页面跳转 } catch(Exception ee) Response.Write(ee.ToString()); //抛出异常 }
8
静态生成功能 上述代码首先使用 ADO.NET 进行数据插入操作,在数据操作成功后,就进行静态生成。静态生成的模板为 template.htm,通过编写 template.htm 文件能够为静态文件编辑相应的模板。在模板读取之后, 系统会将一些关键字进行替换 。 在使用 File 类之前,需要使用 System.IO 命名空间,以提供对文件的读取操作。当读取模板并替换了关键字符串之后,就能够通过 File 类的 CreateText 进行文件的存储,示例代码如下所示。 StreamWriter sw = File.CreateText(Server.MapPath("../html/" + DateTime.Now.ToString() + ".htm")); sw.Write(template); //编写内容 sw.Close(); //关闭对象 上述代码生成了一个以时间为文件名的 htm 静态文件,当文件生成后,就会保存在 html 文件夹中。在编写静态标签时,需要注意的是就是静态标签应该比较复杂。在制作模板时,尽量使用一些符号进行标签规则,例如标题可以编写成为{$title$}或者[*title*]等,就不会与现有的字符串中的字符进行冲突,替换了不该替换的字符串。
9
新闻显示页面 新闻显示页面的作用在于显示新闻,当用户单击一条新闻时就会跳转到新闻显示页面。新闻显示页面可以使用 CSS 和 HTML 布局,新闻显示页面的设计能够提高用户体验、吸引用户。 代码编写了一个 articles.aspx 文件,当用户访问新闻时,会打开该文件并通过参数获取新闻的值,然后将值填充到 Label 等控件中。如图所示。
10
7.4.5 新闻显示页面 在参数获取和填充的过程可以在 Page_Load 方法中编写相应代码,示例代码如下所示。
新闻显示页面 在参数获取和填充的过程可以在 Page_Load 方法中编写相应代码,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["id"] != "") SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=news;Integrated Security=True"); con.Open(); //创建连接 //打开连接 string strsql = "select * from news where id = '" + Request.QueryString["id"] + "'"; //查询数据 SqlDataAdapter da = new SqlDataAdapter(strsql, con); DataSet ds = new DataSet(); int count = da.Fill(ds, "table"); if (count > 0) { Label1.Text = ds.Tables["table"].Rows[0]["title"].ToString(); Label2.Text = ds.Tables["table"].Rows[0]["content"].ToString(); Label3.Text = ds.Tables["table"].Rows[0]["author"].ToString(); Label4.Text = ds.Tables["table"].Rows[0]["time"].ToString(); } else Response.Redirect("default.aspx"); //填充数据 //填充控件 //页面跳转 新闻显示页面的 HTML 代码使用了 Label 控件进行页面文字的呈现,当用户打开页面时,会通过传 递过来的 id 参数进行数据查询。如果数据查询成功,就会填充到相应的控件中,如上述代码所示,填充 后就会显示相应的文本给用户,用户就能够看到新闻。
11
静态模版编写 如果新闻模块不需要静态生成,那么就可以通过 id 参数进行 articles.aspx 页面的访问,例如可以通过 articles.aspx?id=1 这样规则的地址进行访问。但是动态的访问不仅数据访问量大,还不能很好的被搜索引擎搜录,如果选择新闻模块要生成静态,就需要编写相应的模板。 由于新闻模块在添加新闻时就需要生成静态文件,其静态文件的模板读取的是 template.htm,所以编写 template.htm 的HTML代码就能够编写模板文件。 代码编写了模板文件,其中[新闻标题]、[新闻作者]等都是模板标签。当生成静态文件时,系统会根据标签替换数据库中的数据。当用户单击新闻列表的时候,就可以跳转到相应的静态文件进行静态访问而无需动态读取文件,这样就能够快速的提高读取效率并降低服务器压力。
13
使用新闻模块能够快速的发布新闻和显示新闻,如果新闻模块选择生成静态,那么就需要对模板进行编写和解析,管理员可以在后台快速的进行新闻发布,前台就能够显示相应的新闻。在发布新闻之前,首先需要进行登录,如图所示。
14
登录完成后,就能够跳转到后台框架集,后台框架集为管理员提供了遍历的操作,如左图和右图所示,其中侧边是导航栏,右边大块的区域是工作区。
15
框架集能够让管理员方便的进行导航和功能操作,管理员可以在侧边栏中点击相应的菜单,例如单击【添加新闻】和【添加分类】选项进行相应页面的跳转。如果管理员单击的是【添加新闻】选项,则 在主工作区就能够呈现新闻添加页面;如果管理员单击的是【添加分类】选项,则主工作区就会呈现添 加分类页面,而对其他的页面丝毫不会造成影响。单击【添加分类】按钮,首先要为系统添加一个分类, 如图所示。
16
分类添加完成后才能够添加新闻,如果在添加新闻之前已经有了相关分类,则没有必要再行添加, 如果没有则必须添加分类。在添加分类后就能够添加新闻,这里使用了生成静态的方法生成了静态文件, 虽然生成了静态文件,但是同样可以通过参数进行新闻数据的访问。添加新闻和管理新闻操作如图所示。
17
在添加完成后,就能够进行新闻的管理,新闻管理能够修改和删除新闻,修改和删除新闻都能够进行新闻模块中新闻数据的更改。当新闻被修改后,在前台所呈现的新闻样式也不同,当新闻被删除时,当用户访问该新闻则会跳转到首页。 新闻添加后,会在 html 文件夹中生成相应的静态文件,通过访问静态文件可以极大的减少服务器的压力,但是会增加服务器的 IO 读写负担,生成静态文件后同样可以通过参数的方式进行数据的访问。 在 articles.aspx 文件中,通过传递的 id 参数进行数据查询和显示,虽然有些情况下需要进行数据库的操作,但是从另一方面来说减少了 IO 负担,如图所示。
18
动态访问新闻要从数据库中读取数据,而静态访问不需要,新闻模块将静态数据文件存放在 html文件夹中,访问 html 文件夹中的静态文件就能够访问相应的新闻,如图所示。
如图中的地址栏所示,用户访问的是一个.htm 页面而不是.aspx 页面,这说明系统已经将数 据进行替换并生成在 html 文件中,当用户访问相应的静态文件就能够访问相应的页面和数据而无需从 数据中进行读取。
Similar presentations