博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JQuery EasyUi之界面设计——母版页以及Ajax的通用处理(三)
阅读量:6326 次
发布时间:2019-06-22

本文共 8456 字,大约阅读时间需要 28 分钟。

前面介绍过JS了,就这样个人认为还不够用。

因为JS文件是死的,无法使用服务器代码,自然不够灵活。那么通过母版页就完善了这一点。那么下面举一个例子——控件赋值。

控件赋值

前面说过easyui的form自带验证、提交、重置与赋值,那么如何利用这个赋值呢?千篇一律的写赋值代码总是那么的令人厌烦,尤其是元素比较多的时候,用反射嘛又怕别人诟病,那么就用JS来负责这一切吧.

那么如何做到通用呢?那母版页就是不错的选择。

下面贴出母版页完整代码:

1: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Form.master.cs" Inherits="Singer.Form" %>
2:
3: 
4: 
5: 
6:     
7:     
8:         type="text/css" />
9:     
10:     
11:     
12:     
13:     
14:     
15:     
16:     
17: 
18: 
19:     
20:         var ajaxUrl = '/Ajax/Common.ashx';
21:         //表单ID
22:         var id = '<%=Request.QueryString["ID"] %>';
23:         //是否自动加载表单,编辑用
24:         var autoLoad = '<%=Request.QueryString["autoLoad"] %>';
25:         //Ajax类型【页面名】
26:         var typeCode = "<%=System.IO.Path.GetFileName(HttpContext.Current.Request.Path) %>";
27:         $(function () {
28:             if ($.isFunction(window.setAjaxUrl)) {
29:                 setAjaxUrl.call();
30:             }
31:             //加载数据
32:             if (autoLoad == 1 && id !== undefined && id != '') {
33:                 $('#ff').form('load', ajaxUrl + '?autoLoad=1&Type=' + typeCode + '&id=' + id + "&_" + Math.floor(Math.random() * (1000 + 1)));
34:
35:             }
36:         });
37:     
38:     
39:     
40: 
41: 

从代码中可以看出:

  1. 页面上定义了3个全局JS变量,有注释,我就不赘述了。
  2. setAjaxUrl函数在表单赋值加载前执行,可以实现用于更改上面的3个变量的值,或者作其他作用,建议命名为beforeFormLoad。
  3. typeCode的值为页面名,比如“index.aspx”,提交给处理程序用于判断是哪个页面,以便返回对应的JSON数据。

 

后台处理逻辑

那么处理程序如何返回对应的JSON数据呢?先看看大体结构:

1: case "ADMINUSER_ADD.ASPX":
2:     #region 用户添加
3:     {
4:         if (context.Request["autoLoad"] == "1")
5:             context.Response.Write(db.TB_Admin.FirstOrDefault(p => p.ID == Convert.ToInt32(context.Request["id"])).ToJson());
6:         else
7:         {
8:             if (context.Request["id"].IsEmpty())
9:             {
10:                 if (context.Request["AdminPassword"].Trim() == string.Empty)
11:                 {
12:                     context.Response.Write("请输入密码!!");
13:                     return;
14:                 }
15:                 if (context.Request["AdminPassword"] != context.Request["AdminPassword2"])
16:                 {
17:                     context.Response.Write("两次密码不一致!!");
18:                     return;
19:                 }
20:                 var isExist = db.TB_Admin.FirstOrDefault(p => p.AdminLogin == context.Request["AdminLogin"].Trim());
21:                 if (isExist != null)
22:                 {
23:                     context.Response.Write("用户名重复!!");
24:                     return;
25:                 }
26:                 TB_Admin singer = new TB_Admin()
27:                 {
28:                     Defatulflag = context.Request["Defatulflag"] == "1" ? 1 : 0,
29:                     AdminLogin = context.Request["AdminLogin"].Trim(),
30:                     CreateBy = userID.ToString(),
31:                     CreateDate = DateTime.Now,
32:                     LastLoginDate = null,
33:                     Password = Utility.UserINFOManager.PasswordEncry(context.Request["AdminPassword"].Trim()),
34:                     RoleID = Convert.ToInt32(context.Request["RoleID"])
35:                 };
36:                 db.TB_Admin.InsertOnSubmit(singer);
37:                 db.SubmitChanges();
38:             }
39:             else
40:             {
41:                 var isExist = db.TB_Admin.FirstOrDefault(p => p.ID == Convert.ToInt32(context.Request["id"]));
42:                 isExist.Defatulflag = context.Request["Defatulflag"] == "1" ? 1 : 0;
43:                 isExist.AdminLogin = context.Request["AdminLogin"].Trim();
44:                 isExist.RoleID = Convert.ToInt32(context.Request["RoleID"]);
45:                 if (context.Request["AdminPassword"].Trim() != string.Empty)
46:                     isExist.Password = Utility.UserINFOManager.PasswordEncry(context.Request["AdminPassword"].Trim());
47:                 db.SubmitChanges();
48:             }
49:             context.Response.Write("1");
50:             return;
51:         }
52:     }
53:     break;
54:     #endregion

从上面代码可以看出:

    1. 通过Type参数,可以获取请求的页面。
    2. 通过autoLoad参数,可以判断是否是加载赋值。注意FirstOrDefault函数,是获取第一条数据,然后通过ToJson方法(自己定义的扩展方法)转换为JSON数据。
    3. 通过id参数,可以判断是否为编辑。
    4. 以上使用的是LINQ to SQL,个人认为使用LINQ to SQl开发小项目还是挺快的。关于LINQ to SQL的具体使用,就不说了。顺便送大家一段服务器分页通用代码(仅支持LINQ2SQL),如果觉得性能不行,请自己用存储过程实现,这里不考虑性能:
1: /// 
2: /// 当前页
3: /// 
4: private int pageIndex = Convert.ToInt32(HttpContext.Current.Request["page"] ?? "1");
5: /// 
6: /// 每页显示记录数
7: /// 
8: private int pageSize = Convert.ToInt32(HttpContext.Current.Request["rows"] ?? "1");
9: /// 
10: /// 获取分页JSON
11: /// 
12: /// 
13: /// 
14: /// 
15: private string GetPageingJson
(IQueryable
data)
16: {
17:     return string.Format("{
{\"total\":\"{0}\",\"rows\":{1}}}", data.Count(), data.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToJson());
18: }
  1. 相比使用各种.NET Ajax框架,我还是喜欢按上面这种模式,虽然很多Ajax框架可以实现js调用C#方法,可以调用WebService,可以操作服务器控件,但是我仍然痴迷上面的模式,因为个人觉得这样精简、易控制、一目了然、没有ViewState、没有服务器控件、甚至没有Cookie和Session(需要实现接口)。。。。

 

前端HTML

刚才贴的后台处理逻辑是用户管理的编辑界面,那么前端HTML呢?如下:

1: <%@ Page Title="" Language="C#" MasterPageFile="~/Form.Master" AutoEventWireup="true"
2:     CodeBehind="AdminUser_Add.aspx.cs" Inherits="Singer.WebPages.RoleManagement.AdminUser_Add" %>
3: 
4: 
5: 
6: 
7:     
8:         
9:             
10:             " />
11:             
12:                 
13:                     
14:                         
15:                             登录名:
16:                     
17:                     
18:                         
19:                             validtype="length[0,20]" name="AdminLogin">
20:                     
21:                 
22:                 
23:                     
24:                         
25:                             所属角色:
26:                     
27:                     
28:                         
29:                             editable="false" style="width: 300px;" url="/Ajax/Common.ashx?Type=GetRoles"
30:                             required="true" name="RoleID">
31:                     
32:                 
33:                 
34:                     
35:                         在编辑时,输入管理员密码表示重新设置密码。
36:                     
37:                 
38:                 
39:                     
40:                         
41:                             密码:
42:                     
43:                     
44:                         
45:                             id='txtPassword' name="AdminPassword">
46:                     
47:                 
48:                 
49:                     
50:                         
51:                             确认密码:
52:                     
53:                     
54:                         
55:                             id='txtPassword2' name="AdminPassword2">
56:                     
57:                 
58:                 
59:                     
60:                         
61:                             是否上架:
62:                     
63:                     
64:                         
65:                             required="true" value="1" />
66:                     
67:                 
68:             
69:             
70:         
71:         
72:             
73:                 提交 <%--
74:                     重置--%>
75:         
76:     
77:     
78:         $(function () {
79:             if (autoLoad == 1) {
80:                 $('#txtPassword').keypress(function () {
81:                     if ($(this).val().length > 0) {
82:                         $('#txtPassword2').validatebox({
83:                             required: true
84:                         });
85:                     }
86:                 }).change(function () {
87:                     if ($(this).val().length > 0) {
88:                         $('#txtPassword2').validatebox({
89:                             required: true
90:                         });
91:                     } else {
92:                         $('#txtPassword2').validatebox({
93:                             required: false
94:                         });
95:                     }
96:                 });
97: 
98:             } else {
99:                 $('#txtPassword,#txtPassword2').validatebox({
100:                     required: true
101:                 }); ;
102:             }
103:         });
104:     
105: 

值得注意的是:

  1. 这里使用的控件均为HTML控件。
  2. 请注意name属性,该属性决定提交的post参数名,同时也是form加载赋值的参数名,也就是这里的值要与后台输出的JSON要对应。
  3. 返回的JSON数据如下:

 

这一篇就写到这里吧。由于最近忙,又耽误了。。。

转载地址:http://uqgaa.baihongyu.com/

你可能感兴趣的文章
Web应用程序设计十个建议
查看>>
//……关于报文
查看>>
C语言学习-进制转换、变量
查看>>
Base64编码及其作用
查看>>
20172304 2017-2018-2 《程序设计与数据结构》实验五报告
查看>>
第六周学习总结
查看>>
20个数据库设计的最佳实践
查看>>
C# async
查看>>
C语言博客作业02--循环结构
查看>>
图片时钟
查看>>
Unity-2017.3官方实例教程Space-Shooter(一)
查看>>
makefile中重载与取消隐藏规则示例
查看>>
Spring知识点小结(一)
查看>>
Linux 内核版本号查看
查看>>
4-3 简单求和 (10分)
查看>>
Python环境部署
查看>>
【BZOJ1085】【SCOI2005】骑士精神 [A*搜索]
查看>>
【Java多线程】JUC包下的工具类CountDownLatch、CyclicBarrier和Semaphore
查看>>
【git】error: Your local changes to the following files
查看>>
LeetCode – Refresh – Binary Tree Level Order Traversal ii
查看>>