当前位置:编程学习 > C#/ASP.NET >>

编写一个可静态化的页面程序

【考点】
网页静态化的实例编写。
【出现频率】
★★☆☆☆
【解答】
在VS 2008中添加新的HTML页面到NetWeb3项目,并命名为HtmlTemp.htm。在该页面中创建表格,并在<title>内填入“{Title}”,在其他相应单元格中分别填入“{AddUserName}”,“{AddMsg}”和“{AddTime}”。这个静态页面作为网页静态化的模板页面,可以决定网页静态化后的显示布局,编写HtmlTemp.htm如代码12.14所示。

代码12.14  静态模板页面:HtmlTemp.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>{Title}</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
  <table cellpadding="5" cellspacing="0" width="500" border="2">
        <tr>
          <td>留言人:</td>
          <td>{AddUserName}</td>
        </tr>
        <tr>
          <td>留言信息:</td>
          <td>{AddMsg}</td>
        </tr>
        <tr>
          <td align="right" colspan="2">
            留言添加时间:{AddTime}
          </td>
        </tr>
      </table>
</body>
</html>
为了统一编码,在模板页面的<head>内部,要声明页面编码方式为“UTF-8”。为了使浏览用户添加新数据到数据库,并同时可以使显示新添加数据的网页静态化,编写AddData.aspx如代码12.15所示。

代码12.15  添加新数据记录页面:AddData.aspx

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>添加留言数据</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <table>
        <tr>
          <td>留言人:</td>
          <td><asp:TextBox runat="server" ID="UName"></asp:TextBox>
              <asp:RequiredFieldValidator runat="server" ID="vd1" ControlToValidate="UName" ErrorMessage="请输入留言人"></asp:RequiredFieldValidator>
          </td>
        </tr>
        <tr>
          <td>留言信息:</td>
          <td><asp:TextBox runat="server" ID="Msg" TextMode="MultiLine" Columns="50"
                           Rows="4"></asp:TextBox>
              <asp:RequiredFieldValidator runat="server" ID="vd2" ControlToValidate="Msg" ErrorMessage="请输入信息"></asp:RequiredFieldValidator>
          </td>
        </tr>
        <tr>
          <td align="right" colspan="2">
            <asp:Button runat="server" ID="btn" Text="添加" Width="100" onclick="btn_Click" />
          </td>
        </tr>     
      </table>
    </div>
    </form>
</body>
</html>
以上代码提供了添加新数据记录的界面,当用户单击“添加”按钮时,可在添加数据的同时将页面静态化,编写AddData.aspx.cs如代码12.16所示。

代码12.16  添加新数据记录逻辑代码:AddData.aspx.cs

………………………………
//导入必要的命名空间,使用SQL SERVER数据提供者
using System.Data.SqlClient;
//导入StringBuilder类的命名空间
using System.Text;
//导入File类和StreamWriter类的命名空间
using System.IO;
 
namespace NetWeb3
{
    public partial class AddData : System.Web.UI.Page
    {
        //从Web.config的AppSettings节点的第1个子节点中获取数据库连接字符串
        //将连接字符串对象引用赋值给静态字符串变量CnStr
        static string CnStr = ConfigurationManager.AppSettings[0];
        //根据CnStr变量创建SqlConnection对象,引用为cn
        SqlConnection cn = new SqlConnection(CnStr);
        //声明命令对象cmd和参数对象pm
        SqlCommand cmd;
        SqlParameter pm;       
 
        //页面中的“添加”按钮被用户单击的事件处理方法
        protected void btn_Click(object sender, EventArgs e)
        {
            //声明4个变量,UName和Msg用于存储页面中2个用户输入值
            string UName = this.UName.Text;
            string Msg = this.Msg.Text;
            Msg = Msg.Replace("\n","<br />");
            //Time用于存储指定格式的当前时间字符串值
            string Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            //FileName用于存储指定格式的当前时间字符串值,并加上“.htm”,用做文件名
            string FileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".htm";
            //调用OutputHtml方法,传递以上4个参数
            OutputHtml(UName, Msg, Time, FileName);              
        }
 
        private void OutputHtml(string t1, string t2, string t3, string FName)
        {
            //获取将要生成的*.htm文件的虚拟路径,引用为HtmlPath
            string HtmlPath = String.Format(@"\Html\{0}",FName);
            //根据*.htm模板文件的物理路径,读取模板中所有字符串,引用为HtmlTemp,编码为UTF8
            string HtmlTemp = File.ReadAllText(Server.MapPath(".") + @"\HtmlTemp.htm", Encoding.UTF8);
 
            //根据HtmlTemp创建StringBuilder对象,引用为SBuilder
            StringBuilder SBuilder = new StringBuilder(HtmlTemp);
            //将SBuilder中的指定字符串替换为参数变量值
            SBuilder.Replace("{Title}", t1 + "的留言");
            SBuilder.Replace("{AddUserName}", t1);
            SBuilder.Replace("{AddMsg}", t2);
            SBuilder.Replace("{AddTime}", t3);
            //根据FName获取将要生成的*.htm文件物理路径,并创建该文件,返回的StreamWriter对象引用为SWriter
            StreamWriter SWriter = File.CreateText(Server.MapPath(".") + @"\Html\" + FName);
            //调用SWriter的WriteLine方法,将SBuilder的字符串内容写入到文本流中
            SWriter.WriteLine(SBuilder.ToString());
            //将缓冲区内容写入到新创建的*.htm文件中
            SWriter.Flush();
            //关闭SWriter对象
            SWriter.Close();
            //调用AddRow方法,并传递4个参数,用于数据库操作
            AddRow(t1, t2, t3, HtmlPath);
        }
 
        private void AddRow(string t1,string t2,string t3,string t4)
        {
            //定义SqlStr变量,用于存储插入新记录到数据库的SQL查询字符串
            string SqlStr = "INSERT INTO [LeaveMsg] ([UserName],[Message],[Time],[HtmlPath]) VALUES(@UName,@Msg,@Time,@FPath)";
            //根据SqlStr和cn创建新的SqlCommand对象,引用为全局变量cmd
            cmd = new SqlCommand(SqlStr, cn);
            //创建4个SqlParameter对象,用于匹配SqlStr中的参数占位符
            //将4个SqlParameter对象分别加入到cmd的Parameters集合中
            pm = new SqlParameter("@UName", SqlDbType.VarChar, 50);
            pm.Value = t1;
            cmd.Parameters.Add(pm);
            pm = new SqlParameter("@Msg", SqlDbType.VarChar);
            pm.Value = t2;
            cmd.Parameters.Add(pm);
            pm = new SqlParameter("@Time", SqlDbType.VarChar,100);
            pm.Value = t3;
            cmd.Parameters.Add(pm);
            pm = new SqlParameter("@FPath", SqlDbType.VarChar, 200);
            pm.Value = t4;
            cmd.Parameters.Add(pm);
            cn.Open();
            //调用cmd的ExecuteNonQuery方法,执行SQL查询命令
            cmd.ExecuteNonQuery();
            cn.Close();
            //清空输入控件的“Text”属性值
            this.UName.Text = String.Empty;
            this.Msg.Text = String.Empty;
            //将页面重定向到t4参数所指定的虚拟路径
            Response.Redirect(t4);
        }
    }
}
在项目根目录下添加新目录,目录名为“Html”,当用户添加数据并完成网页静态化的过程后,新生成的HTML页面将添加到Html目录下,并且页面将重定向到新数据的HTML静态页面。
【分析】
本题主要考查面试者在网页静态化方面的经验。解答中使用模板替换标签方法在实际开发中使用比较频繁,即通过定义静态页面模板,然后将数据替换模板中的标签(特殊字符串组合)并输出新的HTML静态页面。其静态页面模板显示如图12.6所示。
静态页面模板中的标签可由编程者自己定义,不过不能和HTML标签混淆。用户在AddData.aspx页面中添加数据,留言信息为其他网站中复制,如图12.7所示。
 
图12.6  静态页面模板浏览效果                     图12.7  用户添加新数据
用户单击“添加”按钮后,服务器端完成了数据添加到数据库,并根据静态页面模板生成HTML静态页面到HTML目录的功能,浏览器端被重定向到这个新的静态页面,如图12.8所示。

图12.8  新生成的HTML静态页面

--------------------编程问答-------------------- --------------------编程问答--------------------  在非技术区发这个干嘛?
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,