ASP.net实现的评分功能

PS:由于上几次测试的时候出现了很多的Bug,然后逐步修正了BUg的问题,先可以实现的功能如下:点击评分的时候,异步刷新---对用户来说是一个很好的体验。第二防止网页刷新的时候用户重复提交(这里助于奥使用的收cookie,可是一旦cookie被清空,再刷新的话又可以提交了。。。)

需求描述:UI提供指定的信息供用户选择,用户选中评论,异步更新数据库中的分数。如下图所示:

  问题是我们如何实现这样的功能呢?纠结了好就久。然后想出三种可行的方式:js脚本提交,Ajax异步提交,Jquery提交。嗯,程序部比较强悍的同事说使用JQ来实现。下面开始讲解:UI的Html代码:

1   <div id="scorebar">
2 <ul>
3 <li><span>
4 <input id="input1" type="radio" value="1" />&nbsp;非常满意</span></li>
5 <li><span>
6 <input id="input2" type="radio" value="2"/>&nbsp;一般</span></li>
7 <li><span>
8 <input id="input3" type="radio" value="3"/>&nbsp;不满意</span></li>
9 </ul>

嗯,同事看了下,使用Jqery构建了一个只发送不接收的代码--非常的简介,而且代码量很少:如下

                       <script type="text/javascript">
                        $(function(){
                                $("#input1").click(function () {
                                if(confirm("是否提交?")==true){
                                    $.post("Handler.ashx", { num: $("#input1").val(), kid:<%=kid%>}, function (num) {   
                                    if(num == 'Y')
                                        alert("你已经评论过了!");
                                    else
                                        return  $("#num").text(num);
                                    })
                                    }  else{
                                    return $(this).attr("#num").text(null);
                                    }                              
                                })
                                $("#input2").click(function () {
                                if (confirm("是否提交?")==true){
                                    $.post("Handler.ashx", { num: $("#input2").val(), kid:<%=kid %>}, function (num) {
                                     if(num == 'Y')
                                        alert("你已经评论过了!");
                                     else
                                        return $("#num").text(num);                                                                                                                
                                    })
                                    }else{
                                        return $(this).attr("#num").text(null);
                                    }
                                })
                                $("#input3").click(function () {
                                if(confirm("是否提交?")==true){
                                    $.post("Handler.ashx", { num: $("#input3").val(), kid:<%=kid%>}, function (num) {
                                     if(num == 'Y')
                                        alert('你已经评论过了!');
                                     else
                                         return  $("#num").text(num);                                        
                                    })
                                    }else{
                                        return $(this).attr("#num").text(null);
                                    }
                                })
                            })
                        </script>

够简单吧。可是我就是看不明白哈,哎,不会Jq的程序员真够悲剧的。。。之后再net项目中添加了一个Handler.ashx问价,原来处理Jq提交过来的参数。下面看下该文件代码


 1    public void ProcessRequest(HttpContext context)
 2     {
 3         context.Response.ContentType = "text/plain";
 4 
 5         //提交更新数据库的请求和返回执行更新后的数据。
 6         int radiovalue = int.Parse(context.Request["num"]);
 7         int kid = int.Parse(context.Request["kid"]);
 8         if (radiovalue == 1)
 9         {
10             if (context.Request.Cookies["cookie"] == null)//判断cookie是否存在
11             {
12                 KindergartenInfoManagerLFK.UpdateKinByID(kid, 5);
13                 HttpCookie coo = new HttpCookie("cookie");//创建cookie
14                 coo.Expires = DateTime.Now.AddHours(24);
15                 coo.Values["kid"] = kid.ToString();//存储kid的值到cookie中
16                 context.Response.AppendCookie(coo);
17                 context.Response.Write(KindergartenInfoManagerLFK.SelectUpdate(kid).ToString("0.0"));
18             }
19             else
20             {
21                 if (context.Request.Cookies["cookie"].Values["kid"] != kid.ToString())
22                 {
23                     KindergartenInfoManagerLFK.UpdateKinByID(kid, 5);
24                     context.Request.Cookies["cookie"].Expires = DateTime.Now.AddHours(24);
25                     context.Request.Cookies["cookie"].Values["kid"] = kid.ToString();//存储kid的值到cookie中
26                     context.Response.AppendCookie(context.Request.Cookies["cookie"]);
27                     context.Response.Write(KindergartenInfoManagerLFK.SelectUpdate(kid).ToString("0.0"));
28                 }
29                 else
30                 {
31                     context.Response.Write("Y");
32                 }
33             }
34         }
35         if (radiovalue == 2)
36         {
37             if (context.Request.Cookies["cookie"] == null)//判断cookie是否存在
38             {
39                 KindergartenInfoManagerLFK.UpdateKinByID(kid, 2);
40                 HttpCookie coo = new HttpCookie("cookie");//创建cookie
41                 coo.Expires = DateTime.Now.AddHours(24);
42                 coo.Values["kid"] = kid.ToString();//存储kid的值到cookie中
43                 context.Response.AppendCookie(coo);
44                 context.Response.Write(KindergartenInfoManagerLFK.SelectUpdate(kid).ToString("0.0"));
45             }
46             else
47             {
48                 if (context.Request.Cookies["cookie"].Values["kid"] != kid.ToString())
49                 {
50                     KindergartenInfoManagerLFK.UpdateKinByID(kid, 2);
51                     context.Request.Cookies["cookie"].Expires = DateTime.Now.AddHours(24);
52                     context.Request.Cookies["cookie"].Values["kid"] = kid.ToString();//存储kid的值到cookie中
53                     context.Response.AppendCookie(context.Request.Cookies["cookie"]);
54                     context.Response.Write(KindergartenInfoManagerLFK.SelectUpdate(kid).ToString("0.0"));
55                 }
56                 else
57                 {
58                     context.Response.Write("Y");
59                 }
60             }
61         }
62         if (radiovalue == 3)
63         {
64             if (context.Request.Cookies["cookie"] == null)//判断cookie是否存在
65             {
66                 KindergartenInfoManagerLFK.UpdateKinByID(kid, 0);
67                 HttpCookie coo = new HttpCookie("cookie");//创建cookie
68                 coo.Expires = DateTime.Now.AddHours(24);
69                 coo.Values["kid"] = kid.ToString();//存储kid的值到cookie中
70                 context.Response.AppendCookie(coo);
71                 context.Response.Write(KindergartenInfoManagerLFK.SelectUpdate(kid).ToString("0.0"));
72             }
73             else
74             {
75                 if (context.Request.Cookies["cookie"].Values["kid"] != kid.ToString())
76                 {
77                     KindergartenInfoManagerLFK.UpdateKinByID(kid, 0);
78                     context.Request.Cookies["cookie"].Expires = DateTime.Now.AddHours(24);
79                     context.Request.Cookies["cookie"].Values["kid"] = kid.ToString();//存储kid的值到cookie中
80                     context.Response.AppendCookie(context.Request.Cookies["cookie"]);
81                     context.Response.Write(KindergartenInfoManagerLFK.SelectUpdate(kid).ToString("0.0"));
82                 }
83                 else
84                 {
85                     context.Response.Write("Y");
86                 }
87             }
88         }
89     }

 


项目使用的是三层架构,相应的只用在DAL层和BLL层处理一下就OK了,这个就不说了。三层架构是基础。很多启示都很简单。

启示这就写代码一直在想的问题是:

1.如何减少页面的控件使用,增加UI的加载速度;

2.后台代码如何优化,比如说如果要读取一张数据表的数据,不用多次去读取,只需要读取一次,然后在从里面取相应的值即可,这样我们可使用Lambda+泛型,缓存的使用。暂时想到这么点,不知道还有木有更犀利更强悍的方法?

3.数据库的优化。这个主要是字段。其他暂时没有涉及。

4.网站的安全性,从哪些方面来保证网站的安全性呢?这个很迷惑。

5.网站的总体性能提升?有木有什么比较好一点的方法提升网站的性能,是网站响应速度加快。目前考虑到的就是这么多问题。望众博友不吝赐教。。。拜谢。。。


posted @ 2012-04-01 17:23  流浪在阿尔卑斯的野狼  阅读(841)  评论(0编辑  收藏  举报