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

请看「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(观念篇)......考验初学者能力的一门课

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

  1. winform导入导出excel,后台动态添加控件

    思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...

  2. Android 在布局容器中动态添加控件

    这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...

  3. android动态增加控件时控制样式的方法

    在学习android的动画时,发现所谓的tween动画只是改变绘制效果并不改变原控件的位置时是颇为失望的,虽然3.0之后已经有了property animation,但是由于要兼容老版本的androi ...

  4. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

  5. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  6. 小子给大家分享一个或者多个新手创建tableview经常会遇到的坑(动态创建控件,xib的重用)

    小子最近做了一个根据接口返回的数据在Cell中动态创建控件,感觉应该会一部分人卡在这里,小子就跟大家分享一下: 1.控件重复创建:这个问题出现的原因是动态创建的cell内容的时候,无法进行重用设置,所 ...

  7. VisionPro笔记(1):动态创建控件

     VisionPro学习笔记(1):动态创建控件 有的时候可能需要在程序中动态创建控件,VisionPro实例中提供了一例动态创建Blob控件的方法.当然,动态创建过多的控件会极大的消耗系统的资源,建 ...

  8. asp.net动态添加控件学习

    看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页 ...

  9. Jquery 动态追加控件并获取值

    先展示通过动态添加控件的结果: 实现步骤: 1.引用js文件 <script src="Script/jquery-1.5.1.min.js" type="text ...

随机推荐

  1. CODING 告诉你硅谷的研发项目管理之道(4)

    写在前面 优秀的项目管理者是怎么工作的,如何帮助研发团队高效工作?一直是 CODING 关注的重要话题,我们不断地打磨 CODING 研发系统来让开发更简单.近期我们精心挑选了几篇硅谷科技公司研发管理 ...

  2. 【leetcode 5. 最长回文子串】解题报告

    方法一:中心扩展算法 解题思路:从左到右每一个字符都作为中心轴,然后逐渐往两边扩展,只要发现有不相等的字符,则确定了以该字符为轴的最长回文串,但需要考虑长度为奇数和偶数的不同情况的处理(长度为偶数时轴 ...

  3. 边界提取_MATLAB

    下面是利用腐蚀算法进行边界提取,即原图减去腐蚀后的图得到边界 f=imread('D:/picture/ZiXia.jpg'); figure; subplot(,,); imshow(f); tit ...

  4. cf835(预处理 + 记忆化dp)

    题目链接: http://codeforces.com/contest/835/problem/D 题意: 定义 k 度回文串为左半部分和右半部分为 k - 1 度的回文串 . 给出一个字符串 s, ...

  5. 在Eclipse中使用Maven创建Web工程

    在Eclipse中使用Maven创建Web工程 1.创建maven Project工程,使用maven-archetype-webapp 2.在pom.xml文件中,设置打包类型为war <pa ...

  6. “戏精少女”的pandas学习之路,你该这么学!No.5

    如果文章图片无法观看,请前往CSDN博客观看 https://blog.csdn.net/hihell 戏精博主即将上线 就在上一篇,梦想橡皮擦这位博主经过艰苦的努力 终于能创建一个dataframe ...

  7. k8s集群新增节点

    节点为centos7.4 一.node节点基本环境配置 1.配置主机名 2.配置hosts文件(master和node相互解析) 3.时间同步 ntpdate pool.ntp.org date ec ...

  8. 防止表单submit或按钮button多次连续点击提交

    如上例子:当我点击提交按钮触发submitQuartz()函数 防止用户连续点击提交操作 方法一:获取当时点击时间,根据时间差判断 $scope.submitQuartz=function () { ...

  9. 自动化运维工具之Cobbler

    一.anaconda anaconda负责安装系统向导,默认为GUI界面,如果我们使用ks自动应答安装的话建议使用TUI界面来安装 在安装启动界面我们可以按esc键来自己手动指定安装启动选项 anac ...

  10. Apple开发者账号更改公司名称

    对于大多数的开发者而言,可能很少遇见要修改账户的公司名称的问题,本来公司之前是这个名称,但是后来改名为另外的名称,这样的话在Apple开发者账号上的公司名称再用就不好了,所以就需要到Apple dev ...