• File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)


    以前的两篇文章(收录在书本「上集」的第十七章)

    请看「ASP.NET专题实务」,松岗出版

    File 与 Log #1--ASP.NET的档案与I/O Stream(为系统记录Log文件)

    File 与 Log #2--[图片版]访客计数器(用.txt档案来记录)

    现在这么多免费资源,应该也没人得自己制作「访客计数器」了

    这个范例的结果或许不合用,但其中实作的经验倒是很有趣

    读者来信询问:

          上述第二个范例,如果改用 Image控件(<asp:Image>)而且在后置程序代码撰写,该怎么做?

    其实很简单,只不过是「动态加入控件」而已

    您可以在我书本「上集」第三章的 PlaceHolder控件 或是书本「下集」找到不少范例

    用程序代码动态加入Web Form控件,加入ASP.NET网页

    只要写成 Page.Form.Controls.Add()即可。

    动态加入列表控件的「子选项」,例如:单选 DropDownList 或是 复选CheckBoxList

     -- 列表控件ID.Items.Add()

    [习题]动态新增 DropDownList或 ListBox底下的新项目(Item)#1

    动态加入HTML卷标的属性(attribute)

     -- XXX.Attributes.Add("属性名称", "值")

    [习题]GridView 光棒效果 与 JavaScript -- e.Row.Attributes.Add()方法

    上述三者的程序是否很相似呢?

    上一个范例,仍使用传统HTML的 <img>标签

    假设目前的访客数是 1234,那么我们输出时,要先从最后一个 "4"输出,然后输出 "3" .....

    简单的说,就是把结果「反过来」、一个一个地地对应到这个数字的「图片」,输出到画面上

            while (Length >= 1)    {
                //--访客人数的每一位数字,都用图片来呈现。
                strURL = "<img src='image/" + visitors.Substring((Length-1) ,1) + "图片文件名.gif' />" + strURL;
     
                // 因为 C#语法没有VB的 Mid()函数,所以C#语法里面,改写成
                // 程序代码 strURL = "<img src='image/" + Mid(visitors, Length, 1) + "图片文件名.gif' />" + strURL;
                Length = (Length - 1);
            }

    上面这种作法,有个好处:当您的数字从 999

    要提升到四位数 1000的时候,不需要额外的判断式与程序代码去防呆

    但是,如果改成 <asp:Image>控件,那就不同了!

    因为我们在后置程序代码动态加入控件,所以必须「循序」输出,从头到尾循序输出

    假设目前的访客数是 1234,那么我们输出时,要先从第一个 "1"输出,然后输出 "2" .....

            for(int i =1; i <= Length; i++)
            {   //--访客人数的每一位数字,都用图片来呈现。          
                // 因为 C#语法没有VB的 Mid()函数,
                // 程序代码 strURL = "<img src='image/" & Mid(visitors, i, 1) + "图片文件名.gif' />" & strURL
               //  所以C#语法里面,改写成 --
                Image img = new Image();
                img.ImageUrl = "image/" + visitors.Substring((i-1), 1) + "图片文件名.gif";
     
                Page.Form.Controls.Add(img);   //动态加入控件。
            }

    另外这个范例还发现另一个缺失,就是「读取」文本文件时,太晚关闭资源

    如果程序有错,就会锁住这个 .txt档案,无法释放。

    建议把关闭&释放资源的程序向上移动

    读取完,不用了就立刻关闭、释放。

            //====读取档案 (务必修改这个档案的权限,需要「写入」的权限)====
            StreamReader sr = new StreamReader(Server.MapPath("counter.txt"));
     
            //--把档案内, 原本的访客人数[加一]
            string visitors = sr.ReadLine();
            sr.Close();   // 档案读取,结束!
            sr.Dispose();

    相关文章:动态加入控件

    [转贴]ASP.NET动态加入控件

    [习题].FindControl()方法 与 PlaceHolder控件 #1(动态加入「子控件」,因Page_Load而发生的错误)

    其实动态加入 Web Form控件并不难,

    大部分的人是卡在「动态加入控件了,但用户输入的值,后置程序代码却抓不到」  :-)

    可以参考这三篇文章,从这一篇开始:

    自动化投票区、网络问卷、问卷调查,如何规划与设计?#1(观念篇)......考验初学者能力的一门课

  • 相关阅读:
    HTML
    Java 1.8 新特性
    Java 反射
    子网与超网
    Java 网络编程
    Java 单例模式、枚举
    Java 线程生命周期、线程池
    Java 多线程
    Java Properties、流对象关闭格式
    基础练习 十六进制转八进制
  • 原文地址:https://www.cnblogs.com/mis2000lab/p/5067375.html
Copyright © 2020-2023  润新知