在4-3中,我们动态的添加了文本框,修改了文本框的内容,在刷新页面时,文本框没有消失,内容也没有被更改;
readAllLine时,每次载入页面都需要LoadFile,在 LoadFile的过程当中,其实就是动态创建文本框的过程(要注意,动态文本框的创建要放在PageLoad事件中,否则点击其他控件刷新页面后,动态文本框会消失),其他操作就是保存;
进入readAllLine文件中:
因为要动态地创建文本框,所以首先定义个容器:
注意在readAllLine的子页中定义的
容器和按钮的位置:
进入readAllLine.aspx.cs中进行后台代码的定义,不要忘记添加名称空间:
在PageLoad事件中载入指定文件的内容:
自定义一个getPath()函数,来获取有效路径:
如果,getPath()函数返回了一个地址,说明,页面跳转时有参数,并且文件存在,否则被踢回default;
在PageLoad中构建动态文本框组:
将创建的动态文本框添加到txts_holder当中,修改一下代码:
运行效果:
接下来实现文本框换行:
使用Css来控制;
readAllLine.aspx的Css代码可以写在readAllLine子页的Content中,也可以写在母版页head中:
我们现在写在Content中:
我们要控制的是txts_holder层下的input元素:
注意:以盒模型的方式控制文本框,可以实现文本框的换行;
预览效果:
发现控制不到;
原因:
要学会通过查看源文件来检错
我们来查看源文件:
我们是想修改holder_main层下的文本框,但是我们发现现在的div的id被改成了holder_main_txts_holder,发生这种改变的原因是我们套用了母版页,在Asp.net当中为了避免在母版页下面的元素的id跟母版页中元素的id发生冲突,在使用占位符的过程中,会改变元素的id,将占位符的id前置到元素的id中,从而无法保证Css当中元素id的正确性,该问题无法解决,因此Css代码通常使用class来控制这些元素,因为class是不会被改变的;
在asp.net4.0之后,该问题有了解决方案:
在将要通过Css进行控制的元素中,添加clientidmode属性,并且设置为Static,并且确保这个id与别的id不能发生冲突;
刷新页面:
此时,点击保存修改按钮,文本框不会消失,修改的内容也被保留在文本框当中,这与4-3中动态添加文本框的效果是一样的;
接下来编辑保存文本按钮:
将文本框中的内容保存到文件中;
首先,遍历层下的所有控件,如果是文本框,则把文本框中的内容添加:
因为,会存在一些看不见的控件,而且会被遍历出来,因此要对控件进行检测:
如何做到保存后不改变文本换行的格式:
首先,将每行内容拼接起来,在通过split拆开,并分配到数组之中,在使用writeAllLine方法,将数组内容写入文件中;
长度减一是为了将最后一个字符串后的"\u0081"去掉,否则,在文本文件中,最后一行会多出一个空字符串;