zoukankan      html  css  js  c++  java
  • 让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代码如下所示:

    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后台代码如下所示:

    create_friendlink.cs
    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代码如下所示:

    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运用页面,代码如下所示:

    friendlink.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页面,你的项目就有一些地方不用访问数据库或者其他操作了,如有写的不好的,请拍砖,不要喷,谢谢!

    源码地址,点击这里

    版权所有,转载请注明出处!

    一切伟大的行动和思想,都有一个微不足道的开始。微不足道的我,正在吸取知识的土壤,希望能取得成功!不嫌弃我微不足道的,愿交天下好友!

  • 相关阅读:
    FCC学习笔记(二)
    FCC学习笔记(一)
    jQuery(三)
    jQuery(二)
    jQuery(一)
    JavaScript(九)
    JavaScript(八)
    2-1回归算法
    14-章小结
    13-模型训练及测试
  • 原文地址:https://www.cnblogs.com/cmsdn/p/2198660.html
Copyright © 2011-2022 走看看