您的位置:首页 > 其它

市委组织部考核项目——问题记录

2014-03-21 16:13 423 查看
1.当session获取不到值得时候,我们需要让用户重新登录,这时候就需要调转到登陆页,因为我的大部分方法是写在异步处理程序中的,不方便在后台进行判断,而在一般处理程序中做判断的时候,当session为null时,虽然也执行了跳转页语句,但是界面上是没有什么变化的,最后将判断session是否存在的方法写在了js中,其他方法只要调用这个方法就可以了。方法如下:

function checkSession(){
           var val = "<%= Session["UnitsID"]==null?"":Session["UnitsID"]%>";
           if (val == null||val=="") {
                //location ="../../Login.aspx";
                //location.href ="../../Login.aspx";
                //window.location.href ="../../Login.aspx";
                //opener.document.location.href= "../../Login.aspx";
               //以上四种方法跳转页时都会出现在框架外
               open("../../Login.aspx", "_parent", true);//跳转页在框架呢
                }
       }


对于以上方法中的两种效果如下:

a.跳转页在框架中:




个人认为这种效果很难看,估计用户使用的时候应该也会费解吧,不过这也要看用户的需要和审美了吧



b.跳转页不在框架中:




个人认为这种效果比较不错,说明(这两种效果登陆之后的界面是一样的)



2.在一个框架中,点击左侧的菜单项时,右侧需要根据菜单内容出现一个界面,这时候咱们当然是不想让它逃出这个框架了,方法如下:

<li><a href="test.aspx" target="main">菜单项</a></li>


说明:main为右侧框架的名字,这样他就会老老实实的呆在框架中了

下面是target的属性值的解释,详细见:html中target属性




3.当我们需要根据索引值获取节点的时候,一定要多多注意,火狐与其他浏览器的值不一样,开始我不知道这一点,在火狐上调试好了,结果换了浏览器就找不到了,乱猜导致这种现象的原因,用了不到一个小时,最后才发现原来索引变了,在这说这个的原因就是给大家提个醒,出现这种情况后一定要想想这个啊.没有找到一个很好的解决办法,只是采用了其他方式来避免了这个问题,如果大家有好的办法,一定要记得分享啊



4.text-align:center,这一属性在IE6,IE7中可以使块级元素居中对齐。其他浏览器中,text-align:center仅作用于行内内容上,解决这个问题比较好的方式,就是为所有需要相对父容器居中对齐的块级元素设置“margin-left:auto; margin-right:auto”。但这个方式IE6,IE7中不支持,所以还要设置父容器的 "text-align:center;"。若居中对齐的子元素内的行内内容不需要居中对齐,则还需要为其设置“text-align:left”



5.唐欢讲数据库优化之后对处理大数据的语句进行的修改

--之前的not in

select CadresName,Position,Unit FROMV_InquireCadresData where Name= '市直单位'and Checked='Yes' and

CadresID not in(select CadresID fromV_InquireCadresDataed where Name='市直单位'and YearTime='2014' )

--之后的left join

select A.CadresID,CadresName,Position,UnitFROM V_InquireCadresData AS A left join (select CadresID from V_InquireCadresDataed where Name='市直单位'andYearTime='2014'and Unit='市环保局' ) as B on A.CadresID=B.CadresID where B.CadresID
is null and A.Checked='Yes' and Name='市直单位'and Unit= '市环保局'

做了这样的改进之后,效率提高了很多,同时在这次合作中还学到了这么一条语句, SELECT name, id From sysobjects WHERE xtype = 'u' ORDER BY name ASC是用来查询sqlserver中数据库的所有表的字段的(此例以字段name,id为例)



6.那天在米老师那聊天说到分支多的情况下能用switch ,case就别用if语句,最好使用设计模式——策略模式,说到这想了想好像自己平时并没怎么注意到这一点,赶紧回来了解

switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对 应索引号的表项从而到达定位分支的目的,不过,switch...case 只能处理case为常量的情况,对非常量的情况是无能为力的。例如 if (a
> 1&& a < 100),是无法使用switch...case来处理的。所以,switch只能是在常量选择分支时比if…else效率高,但是if…else能应用于更多的场合,比较灵活,选择哪一种方式还是需要联系实际的,单纯的考虑效率,你可以做个实验自己测试一下,下面是我看了艳玲师姐测试时间的博客后, 写的一个超级简单的测试程序。



Switch…case方式

protectedvoid Page_Load(object sender, EventArgs e)
       {
           System.Diagnostics.Stopwatch stopwatch = newSystem.Diagnostics.Stopwatch();
           stopwatch.Start(); //  开始监视代码运行时间
           int a = 6;
            int b;
           int count = 10000;//int count = 100000000;
           for (int i = 0; i < count; i++)
           {
                switch (a)
                {
                    case 1:
                        b = 1;
                        break;
                    case 2:
                        b = 2;
                        break;
                    case 3:
                        b = 3;
                        break;
                    case 4:
                        b = 4;
                       break;
                    case 5:
                       b = 5;
                        break;
                    case 6:
                        b = 6;
                        break;
                }
           }
           stopwatch.Stop(); //  停止监视
           TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
           double minutes = timespan.TotalMinutes; // 总分钟…
       }


count = 10000时;



count = 100000000时;






If… else方式

protected void Page_Load(object sender,EventArgs e)
       {
           System.Diagnostics.Stopwatch stopwatch = newSystem.Diagnostics.Stopwatch();
           stopwatch.Start(); //  开始监视代码运行时间
           int a = 6;
           int b;
           int count = 10000;
           //int count = 100000000;
           for (int i = 0; i < count; i++)
           {
                if (a == 1)
                {
                    b = 1;
                }
                else if (a == 2)
                {
                    b = 2;
                }
                else if (a == 3)
                {
                    b = 3;
                }
                else if (a == 4)
                {
                    b = 4;
                }
                else if (a == 5)
                {
                    b = 5;
                }
                else if (a == 6)
                {
                    b = 6;
                }
           }       
           stopwatch.Stop(); //  停止监视
           TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
           double minutes = timespan.TotalMinutes; // 总分钟…
       }


count = 10000时;



count = 100000000时;




对比之后相差不是很大,但是你有没有想过这只是一个测试代码而已,没有参杂着更多的元素.如果把它用到逻辑性很强的代码中呢?所以说用什么还是需要考虑需求的,再嵌套一层会怎样?有兴趣的可以去试试,不过一定要写一套等价的代码啊.

7.至于策略模,当一个对象有很多的行为,我们往往会想到用多重的条件语句来实现,虽然能实现,但是如果又来了好几个行为你怎么办,再原来的基础上继续加分支?这样当然可以实现,不过这样设计太过依赖对象了,此时,使用策略模式,把这些行为转移到相应的具体策略类里面,行为的增,减也就不会直接影响到对象,它是依赖接口的,也就可以避免使用难以维护的多重条件选择语句了;这种情况只是你考虑选择使用策略模式的情况之一,可能一说起策略模式大多数人首先会想到算法,不错,策略模式将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,策略模式被很多人称为"可插入式的算法"
.

以上是在项目过程中的一些问题的记录,如果有什么地方理解有误,希望得到大家的纠正.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: