让WebUserControl控件访问数据库歇一歇
你网站很多地方都用到了用户自定义控件吧!你有没有想一下,不让它每次都去数据库读数据,让它歇一歇呢?下面看看我的这个例子吧!觉得很有意义,就在这里分享一下!下午也写了一个弹出DIV层的Ajax登录:http://www.cnblogs.com/cmsdn/archive/2011/10/03/2198598.html
原来一直这样用,今天心血来潮,整理了一会,希望园子朋友多支持一下!觉得好的,就推荐一下!谢谢!洗澡去了,今天还上班,有点累!
项目结构图如下所示:
create_friendlink.ascx是生成静态文件到friendlink.ascx,我们调用用户自定义控件的时候只需要调用friendlink.ascx,而这个文件不需要访问数据库,里面已经有数据了,是不是就不用访问数据库了呢?这样对于不常更新的用户自定义控件很有效,例如我们友情链接,当我们后台添加的时候,把所有要生成的放在一起,就可以全部生成了,只需要你那么轻轻一点,让你的项目速度就可以得到提升!
下面开始演示一下!
先建立一个create_friendlink.ascx文件,create_friendlink.ascx代码如下所示:
1 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="creat_frinendlinkl.ascx.cs" Inherits="control_creat_frinendlinkl" %>
2 <asp:DataList ID="DataList1" runat="server">
3 <ItemTemplate>
4 <a href='<%#Eval("link") %>'><%#Eval("name") %></a>
5 </ItemTemplate>
6 </asp:DataList>
create_friendlink.ascx后台代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class control_creat_frinendlinkl : System.Web.UI.UserControl
{
string filePath = "control/friendlink.ascx";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.BindData(this.DataList1);
}
}
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("name",typeof(string));
dt.Columns.Add("link",typeof(string));
for(int i=0;i<16;i++)
{
DataRow dr = dt.NewRow();
dr["name"] = "mydream雨林制作团队黄冈分团队";
dr["link"] = "http://hg.mydreamyulinzz.com";
dt.Rows.Add(dr);
}
return dt;
}
/// <summary>
/// 绑定数据
/// </summary>
/// <param name="datalist"></param>
private void BindData(DataList datalist)
{
this.DataList1.DataSource = this.GetDataTable();
this.DataList1.DataBind();
}
protected override void Render(HtmlTextWriter writer)
{
bool Redirect = false;
if (Request["File"] == null) { Redirect = true; }
Render(writer, filePath, Redirect);
}
/// <summary>
/// 生成静态方法
/// </summary>
/// <param name="writer"></param>
/// <param name="filePath"></param>
/// <param name="redirect"></param>
public void Render(HtmlTextWriter writer, string filePath, bool redirect)
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
base.Render(tw);
System.IO.StreamWriter sw;
sw = new System.IO.StreamWriter(Server.MapPath(this.filePath), false, System.Text.Encoding.GetEncoding("utf-8"));
sw.Write(html.ToString());
sw.Close();
tw.Close();
}
}
这样的时候,我们只需要随便建立一个aspx页面,然后添加这个用户自定义控件,然后把这个页面生成一下,如果你有多个ascx文件要生成,也可以全部放到里面,一起生成;
然后建立Default.aspx文件,Default.aspx代码如下所示:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
2
3 <%@ Register src="control/creat_frinendlinkl.ascx" tagname="creat_frinendlinkl" tagprefix="uc1" %>
4
5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml">
7 <head runat="server">
8 <title></title>
9 </head>
10 <body>
11 <form id="form1" runat="server">
12 <uc1:creat_frinendlinkl ID="creat_frinendlinkl1" runat="server" />
13 <div>
14 </div>
15 </form>
16 </body>
17 </html>
Default.aspx文件Default.cs代码不用添加,是怎样就是怎样的,呵呵!
然后建立friendlink.ascx(建立的时候,不要单独把代码放在一个文件中,直接全部放在一起,然后全部删掉)文件,文件初始化时如图所示:
看见了吧!只要这个空的就可以了!
我们运行一下建立的那个添加用户自定义控件create_friendlink.ascx的Default.aspx文件,运行效果如下所示:
Default.aspx
然后看看friendlink.ascx文件,如下图所示:
然后添加fridnelin.aspx运用页面,代码如下所示:
<%@ Page Language="C#" %>
<%@ Register src="control/friendlink.ascx" tagname="friendlink" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<uc1:friendlink ID="friendlink1" runat="server" />
<div>
</div>
</form>
</body>
</html>
friendlink.aspx运行页面,效果图如下所示:
如果你页面有调用的用户自定义控件,有不常更新的读文件/读数据库/复杂操作的都可以这样处理,然后在管理员后台添加一个页面,把所有用于编译的用户自定义控件放在一个aspx页面中,这样用户看不到,你编译的时候,可能时间长点,也不长,最多几十秒钟,每次有相应的用户自定义控件读的数据源有改变的时候,只需要轻轻地点击一下你的那个aspx页面,你的项目就有一些地方不用访问数据库或者其他操作了,如有写的不好的,请拍砖,不要喷,谢谢!
版权所有,转载请注明出处!
一切伟大的行动和思想,都有一个微不足道的开始。微不足道的我,正在吸取知识的土壤,希望能取得成功!不嫌弃我微不足道的,愿交天下好友!