一步一步asp.net_ajax学习

继续ajax,今天的任务是做一个大师信息的页面,大致的静态页面

image

image

image

以前的做法大致是先做一个大师的母板页,然后分成3个页面,分开做,不过那样重用性太低了,数据库语句也不注意性能优化,导致查询非常慢,而且用户体验不好,这次考虑用ajax做,并且优化查询.

要实现的功能:

1.首先ajax加载大师基本信息(包括姓名,性别,出生年月,分类,以及大师头像)

2.然后写三个ajax事件响应大师作品,大师简介,获奖情况,

3.默认进入此页面加载大师简介信息

主要的难点:

1.通过js获取html中的参数,比如一个大师列表页调转过来,传递的参数:MasterInfo.aspx?MasterId=xxxxx

我们需要通过js获取这个MasterId参数

2.ajax加载图片回调

3.最难的地方在大师作品,因为大师有多种类别的作品,我们只能获取每种作品的前8位显示出来,这个涉及到数据库查询优化,以前都是通过两次查询或者嵌套查询,性能非常低,这次需要生成json数据,前台JQuery调用也比较复杂.

实现:

1.js获取html中的参数,到网上看了一下,看到一个蛮不错的脚本,获取html参数

   1:  new function(settings) {
   2:    var $separator = settings.separator || '&';
   3:    var $spaces = settings.spaces === false ? false : true;
   4:    var $suffix = settings.suffix === false ? '' : '[]';
   5:    var $prefix = settings.prefix === false ? false : true;
   6:    var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
   7:    var $numbers = settings.numbers === false ? false : true;
   8:    
   9:    jQuery.query = new function() {
  10:      var is = function(o, t) {
  11:        return o != undefined && o !== null && (!!t ? o.constructor == t : true);
  12:      };
  13:      var parse = function(path) {
  14:        var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])?$/.exec(path), base = match[1], tokens = [];
  15:        while (m = rx.exec(match[2])) tokens.push(m[1]);
  16:        return [base, tokens];
  17:      };
  18:      var set = function(target, tokens, value) {
  19:        var o, token = tokens.shift();
  20:        if (typeof target != 'object') target = null;
  21:        if (token === "") {
  22:          if (!target) target = [];
  23:          if (is(target, Array)) {
  24:            target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
  25:          } else if (is(target, Object)) {
  26:            var i = 0;
  27:            while (target[i++] != null);
  28:            target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
  29:          } else {
  30:            target = [];
  31:            target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
  32:          }
  33:        } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
  34:          var index = parseInt(token, 10);
  35:          if (!target) target = [];
  36:          target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
  37:        } else if (token) {
  38:          var index = token.replace(/^\s*|\s*$/g, "");
  39:          if (!target) target = {};
  40:          if (is(target, Array)) {
  41:            var temp = {};
  42:            for (var i = 0; i < target.length; ++i) {
  43:              temp[i] = target[i];
  44:            }
  45:            target = temp;
  46:          }
  47:          target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
  48:        } else {
  49:          return value;
  50:        }
  51:        return target;
  52:      };
  53:      
  54:      var queryObject = function(a) {
  55:        var self = this;
  56:        self.keys = {};
  57:        
  58:        if (a.queryObject) {
  59:          jQuery.each(a.get(), function(key, val) {
  60:            self.SET(key, val);
  61:          });
  62:        } else {
  63:          jQuery.each(arguments, function() {
  64:            var q = "" + this;
  65:            q = q.replace(/^[?#]/,'');
  66:            q = q.replace(/[;&]$/,'');
  67:            if ($spaces) q = q.replace(/[+]/g,' ');
  68:            
  69:            jQuery.each(q.split(/[&;]/), function(){
  70:              var key = decodeURIComponent(this.split('=')[0] || "");
  71:              var val = decodeURIComponent(this.split('=')[1] || "");
  72:              
  73:              if (!key) return;
  74:              
  75:              if ($numbers) {
  76:                if (/^[+-]?[0-9]+\.[0-9]*$/.test(val))
  77:                  val = parseFloat(val);
  78:                else if (/^[+-]?[0-9]+$/.test(val))
  79:                  val = parseInt(val, 10);
  80:              }
  81:              
  82:              val = (!val && val !== 0) ? true : val;
  83:              
  84:              if (val !== false && val !== true && typeof val != 'number')
  85:                val = val;
  86:              
  87:              self.SET(key, val);
  88:            });
  89:          });
  90:        }
  91:        return self;
  92:      };
  93:      
  94:      queryObject.prototype = {
  95:        queryObject: true,
  96:        has: function(key, type) {
  97:          var value = this.get(key);
  98:          return is(value, type);
  99:        },
 100:        GET: function(key) {
 101:          if (!is(key)) return this.keys;
 102:          var parsed = parse(key), base = parsed[0], tokens = parsed[1];
 103:          var target = this.keys[base];
 104:          while (target != null && tokens.length != 0) {
 105:            target = target[tokens.shift()];
 106:          }
 107:          return typeof target == 'number' ? target : target || "";
 108:        },
 109:        get: function(key) {
 110:          var target = this.GET(key);
 111:          if (is(target, Object))
 112:            return jQuery.extend(true, {}, target);
 113:          else if (is(target, Array))
 114:            return target.slice(0);
 115:          return target;
 116:        },
 117:        SET: function(key, val) {
 118:          var value = !is(val) ? null : val;
 119:          var parsed = parse(key), base = parsed[0], tokens = parsed[1];
 120:          var target = this.keys[base];
 121:          this.keys[base] = set(target, tokens.slice(0), value);
 122:          return this;
 123:        },
 124:        set: function(key, val) {
 125:          return this.copy().SET(key, val);
 126:        },
 127:        REMOVE: function(key) {
 128:          return this.SET(key, null).COMPACT();
 129:        },
 130:        remove: function(key) {
 131:          return this.copy().REMOVE(key);
 132:        },
 133:        EMPTY: function() {
 134:          var self = this;
 135:          jQuery.each(self.keys, function(key, value) {
 136:            delete self.keys[key];
 137:          });
 138:          return self;
 139:        },
 140:        load: function(url) {
 141:          var hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1");
 142:          var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
 143:          return new queryObject(url.length == search.length ? '' : search, url.length == hash.length ? '' : hash);
 144:        },
 145:        empty: function() {
 146:          return this.copy().EMPTY();
 147:        },
 148:        copy: function() {
 149:          return new queryObject(this);
 150:        },
 151:        COMPACT: function() {
 152:          function build(orig) {
 153:            var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
 154:            if (typeof orig == 'object') {
 155:              function add(o, key, value) {
 156:                if (is(o, Array))
 157:                  o.push(value);
 158:                else
 159:                  o[key] = value;
 160:              }
 161:              jQuery.each(orig, function(key, value) {
 162:                if (!is(value)) return true;
 163:                add(obj, key, build(value));
 164:              });
 165:            }
 166:            return obj;
 167:          }
 168:          this.keys = build(this.keys);
 169:          return this;
 170:        },
 171:        compact: function() {
 172:          return this.copy().COMPACT();
 173:        },
 174:        toString: function() {
 175:          var i = 0, queryString = [], chunks = [], self = this;
 176:          var encode = function(str) {
 177:            str = str + "";
 178:            if ($spaces) str = str.replace(/ /g, "+");
 179:            return encodeURIComponent(str);
 180:          };
 181:          var addFields = function(arr, key, value) {
 182:            if (!is(value) || value === false) return;
 183:            var o = [encode(key)];
 184:            if (value !== true) {
 185:              o.push("=");
 186:              o.push(encode(value));
 187:            }
 188:            arr.push(o.join(""));
 189:          };
 190:          var build = function(obj, base) {
 191:            var newKey = function(key) {
 192:              return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
 193:            };
 194:            jQuery.each(obj, function(key, value) {
 195:              if (typeof value == 'object') 
 196:                build(value, newKey(key));
 197:              else
 198:                addFields(chunks, newKey(key), value);
 199:            });
 200:          };
 201:          
 202:          build(this.keys);
 203:          
 204:          if (chunks.length > 0) queryString.push($hash);
 205:          queryString.push(chunks.join($separator));
 206:          
 207:          return queryString.join("");
 208:        }
 209:      };
 210:      
 211:      return new queryObject(location.search, location.hash);
 212:    };
 213:  }(jQuery.query || {});

然后我们可以通过这么调用它

image

2.关于图片回调还是涉及到以前做的图片公共管理简化了操作,我们只需要很简单的向GetImg.ashx请求图片,根据type尺寸,fileName和到底调用哪个方法来获取不同的图片

image

3.关于这个类别分组查询,去年我做的一个网页比赛中就遇到过,以前是这两个

psbpsb (1)

分别是全国省市内容加载和红色事件加载,都只需要一条查询语句就能查询结果,利用了分组查询,蛮有意思的,

大致的语句

select id,title,isnull(histroytime,0) as month from(select

id,title,histroytime,row_number() over(partition by histroytime order by

histroytime) total from redCalendar) rn where rn.total<5

 

其实就是row_number和分组的用法

 

然后在程序中判断

程序主要代码:

前台:

   1:  <%@ Page Language="C#" MasterPageFile="~/InfoPage.master" AutoEventWireup="true"
   2:      CodeFile="MasterInfo.aspx.cs" Inherits="Master_MasterInfo" Title="大师信息" %>
   3:   
   4:  <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
   5:      <link href="../css/gs_ms.css" rel="stylesheet" type="text/css" />
   6:   
   7:      <script src="../Admin/scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
   8:   
   9:      <script src="../js/queryUrlParams.js" type="text/javascript"></script>
  10:   
  11:      <script src="MasterInfo.js" type="text/javascript"></script>
  12:   
  13:      
  14:      <script type="text/javascript">
  15:     //获得大师id信息
  16:       var id=$.query.get("MasterId"); 
  17:      </script>
  18:   
  19:  </asp:Content>
  20:  <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
  21:      <div class="ms">
  22:          <div class="ms_top">
  23:              <div class="m_load">
  24:                  <span><a href="../Default.aspx">首页</a> > <a href="MasterList.aspx">大师风采</a> > 大师</span></div>
  25:              <div class="mst_c">
  26:                  <ul class="mst_ul">
  27:                      <li><a href="#" id="Master_Intro">
  28:                          <p class="hide">
  29:                              大师简介</p>
  30:                      </a></li>
  31:                      <li><a href="#" id="Master_Award">
  32:                          <p class="hide">
  33:                              获奖情况</p>
  34:                      </a></li>
  35:                      <li><a href="#" id="Master_Work">
  36:                          <p class="hide">
  37:                              大师作品</p>
  38:                      </a></li>
  39:                  </ul>
  40:                  <div class="mst_img">
  41:                      <img src="../images/master_img.png" id="imgMaster" /></div>
  42:                  <div class="mst_xx">
  43:                      <table width="252" height="141" id="tbMasterInfo">
  44:                      </table>
  45:                  </div>
  46:              </div>
  47:          </div>
  48:          <div class="gs_nr" id="MasterContent">
  49:            
  50:          </div>
  51:      </div>
  52:  </asp:Content>

处理加载的ajax的js文件:

   1:   
   2:       $(function(){
   3:       GetMasterInfo();
   4:       GetMasterIntro();
   5:       //绑定获取大师简介事件
   6:       $("#Master_Intro").click(function(){
   7:       GetMasterIntro();
   8:       });
   9:       $("#Master_Award").click(function(){
  10:       GetMasterReward();
  11:       });
  12:       $("#Master_Work").click(function(){
  13:       GetMasterWork();
  14:       });
  15:       });
  16:      //获取大师基本信息
  17:      function GetMasterInfo(){
  18:      $.ajax({
  19:      url:"Data/MasterInfo.ashx?method=GetMasterInfo&MasterId="+id,
  20:      type:"post",
  21:      success:function(text){
  22:       var jsonData=$.parseJSON(text);
  23:       if(jsonData.Status){             
  24:        var item='<tr><td width="51"> 姓名:</td>';
  25:        item+=' <td width="92">'+jsonData.Data[0].Name+'</td>';
  26:        item+='<td width="47">性别: </td>';
  27:        item+='<td width="42">'+jsonData.Data[0].Sex+'</td>';
  28:        item+=' </tr>';
  29:        item+='<tr> <td> 出生:</td>';
  30:        item+='<td>'+jsonData.Data[0].Birthday+'</td>';
  31:        item+='</tr>';
  32:        item+=' <tr><td colspan="4">艺术家分类:';
  33:        item+=jsonData.Data[0].TypeName;
  34:        item+='</td></tr>';
  35:        
  36:        $("#tbMasterInfo").empty();
  37:        $("#tbMasterInfo").append(item);
  38:          var src="../Admin/FileManage/GetImg.ashx?method=GetMasterPic&type=medium&fileName="+jsonData.Data[0].PicturePath;
  39:        $("#imgMaster").attr("src",src);
  40:       }
  41:      }
  42:      });
  43:      
  44:      }
  45:      //获取大师简介信息
  46:       function GetMasterIntro(){
  47:        $.ajax({
  48:      url:"Data/MasterInfo.ashx?method=GetMasterIntro&MasterId="+id,
  49:      type:"post",
  50:      success:function(text){
  51:        var jsonData=$.parseJSON(text);
  52:       if(jsonData.Status){     
  53:         var item='<h4>大师简介</h4>';
  54:         item+='<p>'+jsonData.Data[0].Introduction+'</p>';
  55:        $("#MasterContent").empty();
  56:        $("#MasterContent").append(item);
  57:         }
  58:        }
  59:        });
  60:       }
  61:       //获取大师荣誉信息
  62:       function GetMasterReward(){
  63:    $.ajax({
  64:      url:"Data/MasterInfo.ashx?method=GetMasterReward&MasterId="+id,
  65:      type:"post",
  66:      success:function(text){
  67:        var jsonData=$.parseJSON(text);
  68:       if(jsonData.Status){     
  69:         var item='<h4>大师荣誉</h4>';
  70:         item+='<ul class="gs_reward">';
  71:         item+=' <li>'+jsonData.Data[0].Reward+'</li></ul>';
  72:         item+=' <h4>获奖情况</h4><ul class="gs_cup">';
  73:        $.each(jsonData.Data[0].CertPicList,function(key,value){
  74:          var img="../Admin/FileManage/GetImg.ashx?method=GetMasterCert&type=medium&fileName="+value.CertPic;
  75:        item+='<li><span class="c_pic_a">';
  76:       item+='<img src='+img+' alt='+value.CertName+' title='+value.CertName+'/></span><span class="a_title">'+value.CertName+'</span>';
  77:        item+='</li>';
  78:        });
  79:        item+='</ul>';
  80:        $("#MasterContent").empty();
  81:        $("#MasterContent").append(item);
  82:         }
  83:        }
  84:        });
  85:       }
  86:       //获取大师产品信息
  87:    function GetMasterWork(){
  88:    $.ajax({
  89:      url:"Data/MasterInfo.ashx?method=GetMasterWork&MasterId="+id,
  90:      type:"post",
  91:      success:function(text){
  92:        var jsonData=$.parseJSON(text);
  93:      
  94:       if(jsonData.Status){ 
  95:       var item='';
  96:       $.each(jsonData.Data,function(key,value){    
  97:         item+='<h4>'+value.TypeName+'</h4>';
  98:         item+='<ul class="gs_pic">';
  99:           $.each(value.Product,function(PKey,PValue){
 100:                 var img="../Admin/FileManage/GetImg.ashx?method=GetMainProductPic&type=medium&fileName="+PValue.Picturepath;
 101:                 item+='<li>';
 102:                    item+='<a href="../Product/Product.aspx?ProductId='+PValue.ProductId+'" class="c_pic_a"><img src="'+img+'" alt="'+PValue.Name+'" title="'+PValue.SimpleName+'"/></a>';
 103:                    item+='<a href="../Product/Product.aspx?ProductId='+PValue.ProductId+'" class="a_title">'+PValue.SimpleName+'<br/><span class="rad2">¥'+PValue.Lsprice+'</span></a> ';
 104:                 item+='</li>';
 105:                               })
 106:         item+='</ul>';
 107:         item+='<div style="text-align:right"><a href="../Product/Master_MoreProduct.aspx?MasterId=' + id + '&&TypeId=' + value.TypeId + '">more>></a></div>';
 108:        
 109:         })
 110:        $("#MasterContent").empty();
 111:        $("#MasterContent").append(item);
 112:        }
 113:        }
 114:        });
 115:       }
 116:       
类别分组的DAL方法:
   1:   /// <summary>
   2:          /// 通过大师id查找大师的产品(每种分别显示前8个)
   3:          /// </summary>
   4:          /// <param name="MasterId">大师id</param>
   5:          /// <returns></returns>
   6:          public DataTable ListAllByMasterIdToDatable(string MasterId)
   7:          {
   8:              return SqlHelper.ExecuteDataTable("select * from(select *,row_number() over (partition by TypeId order by TypeId) total from VProductCraftType where Masterid=@Masterid and Belongstype='0') rn where rn.total<=8", (DbParameter)new SqlParameter("Masterid", MasterId));
   9:          }
数据库的查询效果:
image
BLL的主要业务逻辑处理:
下面第一个的业务逻辑是难点:
   1:     /// <summary>
   2:          /// 根据大师id查找大师的产品信息(每种分别显示前8个)
   3:          /// </summary>
   4:          /// <param name="MasterId">大师Id</param>
   5:          /// <returns></returns>
   6:          public string GetMasterWorkForJson(string MasterId)
   7:          {
   8:              //查询状态
   9:              bool Status = false;
  10:              //获取大师的产品信息(每种显示前8个)
  11:              DataTable dtListProduct = new VProductCraftTypeDAL().ListAllByMasterIdToDatable(MasterId);
  12:              //转化为json格式
  13:              StringBuilder json = new StringBuilder();
  14:              StringWriter sw = new StringWriter(json);
  15:              
  16:              using (JsonWriter jsonWriter = new JsonTextWriter(sw))
  17:              {
  18:                 
  19:                  jsonWriter.Formatting = Formatting.Indented;
  20:                  //判断数据读取状态
  21:                  if (dtListProduct.Rows.Count > 0)
  22:                  {
  23:                      Status = true;
  24:                  }
  25:                  jsonWriter.WriteStartObject();
  26:                  jsonWriter.WritePropertyName("Status");
  27:                  jsonWriter.WriteValue(Status);
  28:                  jsonWriter.WritePropertyName("Data");
  29:   
  30:                  jsonWriter.WriteStartArray();
  31:   
  32:                  //先输出第一个元素的类别信息
  33:                  jsonWriter.WriteStartObject();
  34:                  jsonWriter.WritePropertyName("TypeId");
  35:                  jsonWriter.WriteValue(dtListProduct.Rows[0]["TypeId"].ToString());
  36:                  jsonWriter.WritePropertyName("TypeName");
  37:                  jsonWriter.WriteValue(dtListProduct.Rows[0]["TypeName"].ToString());
  38:                  //第一个元素的开始
  39:                  jsonWriter.WritePropertyName("Product");
  40:                  jsonWriter.WriteStartArray();
  41:   
  42:                  //按照类别分组
  43:                  //产品计数(一个分组下的产品,从1开始算起)
  44:                 
  45:                  for (int num = 0,numProduct=1; num < dtListProduct.Rows.Count;num++, numProduct++)
  46:                  {
  47:                     
  48:                      //获取该类别下的分组总个数
  49:                      int Total = Convert.ToInt32(dtListProduct.Rows[num]["total"]);
  50:                      //如果该类别下还存在未输出的产品
  51:                      if (numProduct <= Total)
  52:                      {
  53:                             
  54:   
  55:                              jsonWriter.WriteStartObject();
  56:                              jsonWriter.WritePropertyName("ProductId");
  57:                              jsonWriter.WriteValue(dtListProduct.Rows[num]["Id"].ToString());
  58:                              jsonWriter.WritePropertyName("Name");
  59:                              jsonWriter.WriteValue(dtListProduct.Rows[num]["Name"].ToString ());
  60:                              jsonWriter.WritePropertyName("SimpleName");
  61:                              jsonWriter.WriteValue(dtListProduct.Rows[num]["SimpleName"].ToString());
  62:                              jsonWriter.WritePropertyName("Lsprice");
  63:                              jsonWriter.WriteValue(dtListProduct.Rows[num]["Lsprice"].ToString());
  64:                              jsonWriter.WritePropertyName("Picturepath");
  65:                              jsonWriter.WriteValue(dtListProduct.Rows[num]["Picturepath"].ToString());
  66:                              jsonWriter.WriteEndObject();
  67:   
  68:                          }
  69:                      else{
  70:                          //将该类别的产品计数重置为1
  71:                          numProduct = 1;
  72:                          //这里给上一个类别的产品结束标记
  73:                          
  74:                          jsonWriter.WriteEndArray();
  75:                          jsonWriter.WriteEndObject();
  76:   
  77:                          jsonWriter.WriteStartObject();
  78:                          jsonWriter.WritePropertyName("TypeId");
  79:                          jsonWriter.WriteValue(dtListProduct.Rows[num]["TypeId"].ToString());
  80:                          jsonWriter.WritePropertyName("TypeName");
  81:                          jsonWriter.WriteValue(dtListProduct.Rows[num]["TypeName"].ToString());
  82:                          //如果还存在产品
  83:                          if (num < dtListProduct.Rows.Count)
  84:                          {
  85:                              //下一个元素的开始
  86:                              jsonWriter.WritePropertyName("Product");
  87:                              jsonWriter.WriteStartArray();
  88:   
  89:                          }
  90:                          
  91:                      }
  92:                  }
  93:                  
  94:   
  95:                      jsonWriter.WriteEndArray();
  96:                      jsonWriter.WriteEndObject();
  97:                   
  98:              }
  99:              return json.ToString();
 100:          }

生成的json数据:

这里推荐大家一个工具,就是这个W3Cfuns前端工具,蛮好用的

image

   1:    /// <summary>
   2:          /// 获取大师简介信息
   3:          /// </summary>
   4:          /// <param name="id"></param>
   5:          /// <returns></returns>
   6:          public string GetMasterIntroForJson(string id)
   7:          {
   8:              //加载状态
   9:              bool Status = false;
  10:              int MasterId = Convert.ToInt32(id);
  11:              //获取大师基本信息
  12:              master Info = new masterDAL().Get(MasterId);
  13:   
  14:              //转化为json格式
  15:              StringBuilder json = new StringBuilder();
  16:              StringWriter sw = new StringWriter(json);
  17:              using (JsonWriter jsonWriter = new JsonTextWriter(sw))
  18:              {
  19:                  jsonWriter.Formatting = Formatting.Indented;
  20:                  //判断数据读取状态
  21:                  if (Info.Id.HasValue)
  22:                  {
  23:                      Status = true;
  24:                  }
  25:                  jsonWriter.WriteStartObject();
  26:                  jsonWriter.WritePropertyName("Status");
  27:                  jsonWriter.WriteValue(Status);
  28:                  jsonWriter.WritePropertyName("Data");
  29:   
  30:                  jsonWriter.WriteStartArray();
  31:                  jsonWriter.WriteStartObject();
  32:                  jsonWriter.WritePropertyName("Introduction");
  33:                  jsonWriter.WriteValue(Info.Introduction);
  34:                  jsonWriter.WriteEndObject();
  35:                  jsonWriter.WriteEndArray();
  36:   
  37:                  jsonWriter.WriteEndObject();
  38:   
  39:              }
  40:              return json.ToString();
  41:          }
  42:          /// <summary>
  43:          /// 获取大师获奖信息
  44:          /// </summary>
  45:          /// <param name="id"></param>
  46:          /// <returns></returns>
  47:          public string GetMasterRewardForJson(string id)
  48:          { 
  49:           //加载状态
  50:              bool Status = false;
  51:              //获取大师荣誉证书
  52:              IEnumerable<master_cert> masterCertList = new master_certDAL().ListAllById(id);
  53:              int MasterId = Convert.ToInt32(id);
  54:              //获取大师基本信息
  55:              master Info = new masterDAL().Get(MasterId);
  56:   
  57:              //转化为json格式
  58:              StringBuilder json = new StringBuilder();
  59:              StringWriter sw = new StringWriter(json);
  60:              using (JsonWriter jsonWriter = new JsonTextWriter(sw))
  61:              {
  62:                  jsonWriter.Formatting = Formatting.Indented;
  63:                  //判断数据读取状态
  64:                  if (Info.Id.HasValue)
  65:                  {
  66:                      Status = true;
  67:                  }
  68:                  jsonWriter.WriteStartObject();
  69:                  jsonWriter.WritePropertyName("Status");
  70:                  jsonWriter.WriteValue(Status);
  71:                  jsonWriter.WritePropertyName("Data");
  72:   
  73:                  jsonWriter.WriteStartArray();
  74:                  jsonWriter.WriteStartObject();
  75:                  jsonWriter.WritePropertyName("Reward");
  76:                  jsonWriter.WriteValue(Info.Reward);
  77:   
  78:                 jsonWriter.WritePropertyName("CertPicList");
  79:                  jsonWriter.WriteStartArray();
  80:                  foreach (master_cert cert in masterCertList)
  81:                  {
  82:                      jsonWriter.WriteStartObject();
  83:                      jsonWriter.WritePropertyName("CertName");
  84:                      jsonWriter.WriteValue(cert.Name);
  85:                      jsonWriter.WritePropertyName("CertPic");
  86:                      jsonWriter.WriteValue(cert.Picpath);
  87:                      jsonWriter.WriteEndObject();
  88:   
  89:                  }
  90:                  jsonWriter.WriteEndArray();
  91:                  jsonWriter.WriteEndObject();
  92:   
  93:   
  94:                  jsonWriter.WriteEndObject();
  95:   
  96:              }
  97:              return json.ToString();
  98:          }
  99:          
 100:          /// <summary>
 101:          /// 获取大师基本信息
 102:          /// </summary>
 103:          /// <param name="id">大师id</param>
 104:          /// <returns></returns>
 105:          public string GetMasterInfoForJson(string id)
 106:          {
 107:              //加载状态
 108:              bool Status = false;
 109:              //获取大师类别信息
 110:              IEnumerable<VMasterType> masterTypeList = new VMasterTypeDAL().ListAllById(id);
 111:              //拼接大师类别信息
 112:              StringBuilder sbTypeName = new StringBuilder();
 113:              foreach (var masterType in masterTypeList)
 114:              {
 115:                  sbTypeName.Append(masterType.TypeName);
 116:   
 117:                  if (masterType != masterTypeList.Last())
 118:                  {
 119:                      sbTypeName.Append(",");
 120:                  }
 121:              }
 122:   
 123:              int MasterId = Convert.ToInt32(id);
 124:              //获取大师基本信息
 125:              master Info = new masterDAL().Get(MasterId);
 126:   
 127:              //转化为json格式
 128:              StringBuilder json = new StringBuilder();
 129:              StringWriter sw = new StringWriter(json);
 130:              using (JsonWriter jsonWriter = new JsonTextWriter(sw))
 131:              {
 132:                  jsonWriter.Formatting = Formatting.Indented;
 133:                  //判断数据读取状态
 134:                  if (Info.Id.HasValue)
 135:                  {
 136:                      Status = true;
 137:                  }
 138:                  jsonWriter.WriteStartObject();
 139:                  jsonWriter.WritePropertyName("Status");
 140:                  jsonWriter.WriteValue(Status);
 141:                  jsonWriter.WritePropertyName("Data");
 142:   
 143:                  jsonWriter.WriteStartArray();
 144:                  jsonWriter.WriteStartObject();
 145:                  jsonWriter.WritePropertyName("Name");
 146:                  jsonWriter.WriteValue(Info.Name);
 147:                  jsonWriter.WritePropertyName("Sex");
 148:                  jsonWriter.WriteValue(Info.Sex == "1" ? "男" : "女");
 149:                  jsonWriter.WritePropertyName("Birthday");
 150:                  jsonWriter.WriteValue(Info.BirthDay.Value.ToShortDateString());
 151:                  jsonWriter.WritePropertyName("PicturePath");
 152:                  jsonWriter.WriteValue(Info.Picturepath);
 153:                  jsonWriter.WritePropertyName("TypeName");
 154:                  jsonWriter.WriteValue(sbTypeName.ToString());
 155:                  jsonWriter.WriteEndObject();
 156:                  jsonWriter.WriteEndArray();
 157:   
 158:                  jsonWriter.WriteEndObject();
 159:   
 160:              }
 161:              return json.ToString();
 162:          }
 
这样这次的任务就完成了,总体感觉蛮不错的,效果很好,就是那个json数据拼接拼了好久,纠结了好久.
接下来,尽快把这个项目完整的做完,静态页面管理,大师空间,企业空间,第三方支付平台,等等,然后步入asp.net mvc学习.....哈哈!
 
 
 
我的superui开源后台bootstrap开发框架github地址:https://github.com/tzhsweet/superui
原文地址:https://www.cnblogs.com/mysweet/p/2477497.html