您的位置:首页 > 编程语言 > ASP

asp.net生成静态页面(静态页面中包括有实时信息)

2010-04-16 15:04 387 查看
asp.net生成静态页面通常会有2中方式,一种是伪静态,一种是事先写好模板然后直接替换内容。对于2种方式的优缺点,在此不讨论,重点是说下第二种方式,在生成静态页面中有一些信息需要实时从数据库读取(比如:在新闻页面,我们会需要一些热点排行,这些热点新闻我们就需要实时的从数据库里边拿到)。

实现方式:通过网站查找和询问,得知就是ajax比较实用。

1.还是要写好生成静态页面的模板页面,但是,在模板页面放置热点新闻的地方,我们可以放一个DIV

<div id="hot">
</div>

同时我们需要写一段JS,用来实时获取数据库信息(注:获取方式通过一个其他ASPX页面获取,然后显示到刚刚定义的DIV中)。

<mce:script language="javascript"><!--
var request = false;
//实例化XMLHttpRequest
function createXMLHttpRequest()
{
try
{
request = new ActivexObject("Msxml2.XMLHTTP");
}
catch(e1)
{
try
{
request = new ActivexObject("Microsoft.XMLHTTP");
}
catch(e2)
{
request = false;
}
}
if(!request && typeof XMLHttpRequest != 'undefined')
{
//非IE内核浏览器实例化XMLHttpRequest的方法
request = new XMLHttpRequest();
}
}

//发送客户端请求的方法
function getServerTime()
{
//调用上面的方法实例化XMLHttpRequest
createXMLHttpRequest();
//escape()对特殊字符进行转义
var url = "../hot.aspx";
//alert(url);
//通过GET的方式打开请求,第三个参数ture表示异步发送请求,false表示同步
request.open("GET",url,true);
//当request的等待状态发生变化时要执行的客户端方法
request.onreadystatechange=update;
//因为在url中已经附带了参数,这里的参数为null
request.send(null);
}
//当接收到服务器的响应之后执行的客户端方法
function update()
{
//状态为4表示得到了服务器的正确响应
if(request.readyState == 4)
{
document.getElementById("hot").innerHTML = request.responseText;
}
}

// --></mce:script>


还需要在body的onload事件中调用以上的方法: <body onload="getServerTime();">

静态页面就完成了。

2.现在来看下上边说的ASPX页面代码(该页面作用主要用来获取数据库信息并将信息输出出来)。

hot.aspx前台页面

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

hot.aspx.cs后台代码

string sql = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBindyx();
}
}

public void DataBindyx()
{
StringBuilder result = new StringBuilder();
sql = "select top 12 * from [T_News] where newstypeid=16 order by id desc";
DataView dv = DBFun.GetDataView(sql);
DataTable dt = DBFun.dataTable(sql);

if (dt.Rows.Count > 0)
{
result.Append("<table cellpadding='0' cellspacing='0' border='0'>");
for (int i = 0; i < dt.Rows.Count; i++)
{
result.Append("<tr height=22>");
result.Append("<td width='29' align='center' style="border-bottom: 1px dotted #ccc; " mce_style="border-bottom: 1px dotted #ccc; ">");
result.Append("<img src="../images/arrow3.gif" mce_src="images/arrow3.gif" width='29' height='11' /></td>");
result.Append("<td width='200' align='left' style="border-bottom: 1px dotted #ccc" mce_style="border-bottom: 1px dotted #ccc">");
result.Append("<a class='newslink' target='_blank' href=" +dt.Rows[i][" mce_href=" +dt.Rows[i]["link"].ToString () + ">" + GetShortTitle(dt.Rows[i]["title"].ToString (),11) + "</a></td></tr>");
}
result.Append("<tr height='12'><td colspan='2'></td></tr>");
result.Append("</table>");
Response.Write(result.ToString());
}
}

public string GetShortTitle(string str_title, int str_lenth)
{
if (str_title.Length > str_lenth)
{
return str_title.Substring(0, str_lenth) + "...";
}
else
{
return str_title;
}
}


获取数据库数据,并输出出来。

3.所有准备工作已经做完,现在来写一段生成静态页面的代码,进行测试。

public static bool WriteFile(string filename, string title, string addtime, string content,string newstype)
{
string path = HttpContext.Current.Server.MapPath("../news");//文件输出目录
Encoding code = Encoding.GetEncoding("gb2312");
// 读取模板文件
string temp = HttpContext.Current.Server.MapPath("template/news.htm");//模版文件
StreamReader sr = null;
StreamWriter sw = null;
string str = "";
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // 读取文件
}
catch (Exception exp)
{
HttpContext.Current.Response.Write(exp.Message);
HttpContext.Current.Response.End();
sr.Close();
}
finally
{
sr.Close();
}

//静态文件名

// 替换内容
// 这时,模板文件已经读入到名称为str的变量中了
str = str.Replace("newstitle", title );
str = str.Replace("newsaddtime", addtime );
str = str.Replace("newscontent", content);
// 写文件
try
{
sw = new StreamWriter(path + "//" + filename, false, code);
sw.Write(str);
sw.Flush();
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.End();
}
finally
{
sw.Close();
}
return true;
}


4.整个过程就算完成了。测试成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: