本文章是对刚做完BS系统的总结。主要记录开发过程中遇到的问题,及问题是如何解决的。
1,界面显示
一个系统界面首先要和谐,比如不同页面文本框长度高度要统一,按钮样式要一致,表格显示一样居中都居中靠左都靠左,这也就是所说的全局观,整体上的样式一直,界面才显得和谐。
这里主要解决按钮样式的问题。
系统的框架是直接用别人写好的,我们要做的就是向框架中填东西,这个框架自带了一个登陆界面,做的挺漂亮的,按钮提示框都是经过CSS的处理美化的。我们系统功能实现后发现,系统中的按钮都是Button而且是没有经过处理的,提示信息也是没有经过处理的,这就很不和谐,虽然测试组没有给我们提这样一个Bug,但是这个问题确实存在。
既然登陆界面上有现成的样式,将它样式拿过来直接用不就得了么,问题又来了,登陆界面上的“确定”做的跟按钮样式一样,但他实际上却是<span>标签,做的挺厉害的标签效果跟按钮还要好,我们改就麻烦了,我们系统内的button确实不支持CSS中图片效果。
这种思路行不通,那就赶紧转换思想吧。Button不行,那我们就用行的LinkButton,只要LinkButton的ID和Onclick事件的名称跟替换的Button的一样,后台代码就不用修改。
总结:当这条路行不通时,赶紧转换思想,想另一条路去实现。
2,功能实现
1),JavaScript中读取Session值。
在这里我首先想说说C#是如何实现异面存取值得。
都知道将公用变量存在Session中在读取的时候会非常的方便。这个功能在C#中实现却有点困难。
因为C#是面向对象的,在这个界面中实例化一个对象,将字符串赋给对象的一个属性,要想在另一个类中使用吧还得重新实例化(非静态的类和方法),而且吧实例出来的跟之前那个赋属性的又不是一个对象。所以说在C#中没有想Session这样直接异面存取值得功能。那要想在C#中如何实现异面存取值得功能呢,上面提到要想使用类得实例化非静态的类除外,第一种方法出来了,我们声明一个静态的类一个静态的方法,使用的时候就去找这个静态类,这样不就达成目的了么。还有一种方法,我们在做机房收费系统的时候一般都是用实体类传参,我们仿照实体类,给窗体加属性,用于异面读取。
这两种方法都达到了异面传值,不同的是使用静态类,只要是静态类中的静态属性有值,其他界面都可以用,如果使用窗体传值,必须要给使用值得窗体加属性。在BS中有Session提供给我们直接使用我感觉太幸福了,都不用我们费力自己去实现。
下面回过头来说JavaScript读取Session值。
在JavaScript中是不识别Session的,那就等于不能直接读取Session值了。那我们就间接读取。
方法一,将Session值传给隐藏控件,在js中获取隐藏控件的值。这个是能实现的。
代码:
Var sessionName=""
function ToGetString() {
sessionName= document.getElementById("hidname");
sessionName= sessionName.value;
alert(sessionName); //是有值的
}
但是在我们系统的环境下是实现不了的,原因就是js是顺序执行的,在functionToGetString ()函数中能都弹出alert,在函数外面就不能弹出来,也就是说在函数外面是取不到Session返回值得。这种方法行不通,那再看另一种方法。
方法二,js中是可以直接获取后台函数的返回值得。
具体实现代码如下:
varsessionName=<%=getString()%>"; //获取值 js前台代码
public string getString() { //后台函数代码
return Session["name"].ToString();
}
2)根据角色权限显示界面
系统的一级菜单列表框是写死在代码中的,如下图中人员管理,任务管理,机房信息管理,值班老师。
子菜单要求根据用户权限显示隐藏。如上图中值班老师下的子菜单,如果是管理员的话就显示添加值班老师子菜单,如果不是管理员就隐藏。
直接让子菜单隐藏,这个几乎也是不可能的,因为一级菜单列表和子菜单列表都是通过读取Xml文件加载的,一级菜单列表加载一个xml,每一个一级菜单下的子菜单读取一个xml加载。
起初以为隐藏是做不了了,功能不能不做,把添加值班老师功能换成按钮添加在查看值班老师界面上。这种方法在功能实现不了的情况下是一种解决方法。但是界面肯定不和谐,也不美观。下面看看其他相比好点的实现方法。
方法一:多写两个xml文件,在子菜单加载的时候就判断用户权限,根据用户权限读取不同的xml文件。
如值班老师菜单:
如果用户权限是管理员权限就读取WorkTeacherAdmin.xml文件,如果是一般用户就加载WorkTeacher.xml,如果是负责人就加载WorkTeacherLeader.xml文件。
现在系统采用的是这样实现方法。在网上还看到一种实现方法,就是将用户权限跟对应的菜单写到数据库中,加载的时候直接去数据库中读,这种实现要用到Ajax技术,现在还没有掌握,等掌握了Ajax后再去用这种方法实现,现在可以肯定这种方法也是可以实现的。而且比读取不同的xml效果要好。
3,打包发布
1)发布的网站 地址文件不能放在桌面或是C盘。
系统第一次申请测试时,发布的网站文件夹是放在桌面的,结果导致只有自己的电脑能通过Ip访问,局域网内都不能访问。
2)发布的端口如果不是系统默认的(80)访问的时候要添加权限或者关闭系统防火墙。
在新闻系统发布的时候由于是用的默认端口,在别人的电脑上测试了一下可以了就没有再考虑其他的问题,这次发布的不是默认的端口了,同样导致局域网内无法访问。
解决方法,一是关闭系统防火墙(不推荐),二是添加系统默认端口。
当然在做系统的时候遇到的问题肯定比这些多的多,在错误中总结经验,在经验中成长。