婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 利用ASP.NET MVC+EasyUI+SqlServer搭建企業開發框架

利用ASP.NET MVC+EasyUI+SqlServer搭建企業開發框架

熱門標簽:代理接電話機器人如何取消 地圖標注的公司有哪些 地圖定位圖標標注 塔城代理外呼系統 濮陽外呼電銷系統怎么樣 地圖標注專業團隊 天心智能電銷機器人 400電話辦理哪家性價比高 遂寧市地圖標注app

我們要搭建的框架是企業級開發框架,適用用企業管理信息系統的開發,如:OA、HR等

1、框架名稱:sampleFrame。

2、搭建原則:最少知識原則。

3、先定義一個簡單的編碼規范:除類名和接口名外,其余首字母小寫。

4、準備開發環境:vs2010及以上(mvc4)、sqlserver、jquery2.0和easyui1.4.5

首先來看一下列表頁面的效果圖:

我們期望簡潔帶前臺代碼,如下:

table id="dataGrid" class="easyui-datagrid" url="getList" toolbar="#toolbar">
 thead>
 tr>
  th field="customerId" sortable="true" data-options="sortable:true" width="50">
  customerId
  /th>
  th field="companyName" data-options="sortable:true" width="50">
  companyName
  /th>
  th field="phone" width="50">
  phone
  /th>
  th field="address" width="50">
  address
  /th>
 /tr>
 /thead>
/table>
div id="toolbar">
 div>
 a class="easyui-linkbutton" iconcls="icon-add" onclick="add();">添加/a>
 a class="easyui-linkbutton" iconcls="icon-edit" onclick="edit();">修改/a>
 a class="easyui-linkbutton" iconcls="icon-remove" onclick="del();">刪除/a>
 /div>
 div>
 input id="queryBox" class="easyui-textbox" buttonicon="icon-search" style="width: 200px;"
  data-options="onClickButton:function(){loadList(loadListSettings);}" />
 a class="easyui-linkbutton" iconcls="icon-find" onclick="showQueryWindow();">
  詳細查詢/a>
 /div>
/div>
script type="text/javascript">
 var loadListSettings = { searchFields: "customerId,companyName", prompt: "請輸入客戶Id或公司名稱" };
/script>
script type="text/javascript">
 pageInit(); 
/script>

為了這樣簡潔的前臺,我們需要準備:

1、通用的布局模板_Layout.cshtml。base.css、base.js、defaultSettings.js、tool.js和private.js見后面

!doctype html>
html>
head>
 meta charset="utf-8" />
 meta name="viewport" content="width=device-width" />
 meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
 link href='/webResource/easyui/themes/default/easyui.css' rel='stylesheet' type='text/css' />
 link href='/webResource/easyui/themes/icon.css' rel='stylesheet' type='text/css' />
 link href='/webResource/base.css' rel='stylesheet' type='text/css' />
 script src="/webResource/jquery/jquery.min.js" type="text/javascript">/script>
 script src="/webResource/jquery/json2.js" type="text/javascript">/script>
 script src="/webResource/easyui/jquery.easyui.min.js" type="text/javascript">/script>
 script src="/webResource/easyui/locale/easyui-lang-zh_CN.js" type="text/javascript">/script>
 script src="/webResource/tool.js" type="text/javascript">/script>
 script src="/webResource/base.js" type="text/javascript">/script>
 script src="/webResource/defaultSettings.js" type="text/javascript">/script>
 script src="/webResource/private.js" type="text/javascript">/script>
 @RenderSection("scripts", required: false)
/head>
body style="width: 100%; height: 100%; margin: 0px;">
 @RenderBody()
/body>
/html>

2、平臺樣式表base.css

.icon-find
{
 background: url('icons/find.png') no-repeat center center;
}

.datagrid-toolbar div:nth-child(1)
{
 float: left;
 width: 60%;
}
.datagrid-toolbar div:nth-child(2)
{
 margin-left: 60%;
 margin-right: 10px;
 width: auto;
 text-align: right;
}

3、基本方法腳本base.js

//取消自動渲染
$.parser.auto = false;

function pageInit() {

 //改變控件默認值
 $.fn.linkbutton.defaults.plain = true;
 $.fn.datagrid.defaults.fit = true;
 $.fn.datagrid.defaults.fitColumns = true;
 $.fn.datagrid.defaults.pagination = true;

 //顯示ajax異常信息
 $(document).ajaxError(function (event, xhr, options, exc) {
 $.messager.alert({ title: '異步請求出錯', msg: xhr.responseText, icon: "error" });
 });

 //地址欄傳參允許中文
 jQuery(document).ajaxSend(function (event, request, options) {
 options.url = encodeURI(options.url);
 });

 $.parser.parse();
}

function loadList(settings) {
 var settings = $.extend(true, {}, loadListDefaultSettings, settings);

 if ($("#" + settings.gridId).length == 0)
 $.messager.alert({ title: "系統異常", msg: "DataGrid:" + settings.gridId + "不存在!", icon: "error" });

 var quickQueryData = [];
 if ($("#" + settings.queryBoxId).length > 0) {
 var val = $("#" + settings.queryBoxId).textbox("getValue");
 if (settings.searchFields  val) {
  var keys = settings.searchFields.split(',');
  for (i = 0, len = keys.length; i  len; i++) {
  quickQueryData.push({ field: keys[i], method: 'inLike', value: val });
  }
 }
 }

 var queryData = []; //詳細查詢預留 

 //加載數據
 $("#" + settings.gridId).datagrid("load", { quickQueryData: JSON.stringify(quickQueryData), queryData: JSON.stringify(queryData) });
}

4、基本腳本默認值defaultSettings.js

//查詢參數設置
var loadListDefaultSettings = {
 url: "getList",
 gridId: "dataGrid",
 queryWindowId: "queryWindow",
 queryBoxId: "queryBox",
 searchFields: "Name",
 addQueryString: true,
 prompt: "請輸入"
};



5、可能需要使用的工具方法tool.js

//判斷是否包含地址欄參數
function hasQueryString(key, url) {
 if (typeof (url) == "undefined")
 url = window.location.search;

 var re = new RegExp("[?]" + key + "=([^\\]*)", "i");
 var a = re.exec(url);
 if (a == null) return false;
 return true;
}

//獲取地址欄參數,如果參數不存在則返回空字符串
function getQueryString(key, url) {
 if (typeof (url) == "undefined")
 url = window.location.search;
 var re = new RegExp("[?]" + key + "=([^\\]*)", "i");
 var a = re.exec(url);
 if (a == null) return "";
 return a[1];
}

//將當前地址欄參數加入到url
function addUrlSearch(url) {
 var newParams = [];

 var paramKeys = window.location.search.replace('?', '').split('');
 for (var i = 0; i  paramKeys.length; i++) {
 var key = paramKeys[i].split('=')[0];
 if (key == "" || key == "_t" || key == "_winid" || key == "isTab")
  continue;
 if (!hasQueryString(key, url))
  newParams.push(paramKeys[i]);
 }

 if (url.indexOf('?') >= 0)
 return url + "" + newParams.join('');
 else
 return url + "?" + newParams.join('');
}

//url增加參數
function addSearch(url, key, value) {
 if (!hasQueryString(key, url)) {
 if (url.indexOf('?') >= 0)
  return url + "" + key + "=" + value;
 else
  return url + "?" + key + "=" + value;
 }
 else
 return url;
}

//獲取數組中對象的某個值,逗號分隔
function getValues(rows, attr) {
 var fieldValues = [];
 for (var i = 0; i  rows.length; i++) {
 if (rows[i] != null)
  fieldValues.push(rows[i][attr]);
 }
 return fieldValues.join(',');
}

6、可能需要使用的私有方法private.js,此文件包含的方法專供base.js使用,開發web時禁止使用

//替換掉Url中的{}參數
function replaceUrl(settings, pty) {
 if (!pty)
 pty = "url";
 if (!settings[pty])
 return;
 var str = settings[pty];
 var guid = "";
 var result = str.replace(/\{[0-9a-zA-Z_]*\}/g, function (e) {
 var key = e.substring(1, e.length - 1);

 if (key == "GUID") {
  if (!guid) {
  $.ajax({
   url: "getGuid",
   type: "post",
   async: false,
   success: function (text, textStatus) {
   guid = text;
   }
  });
  }
  return guid;
 }
 if (hasQueryString(key)) //從地址欄返回
  return getQueryString(key);
 if (settings.currentRow  settings.currentRow[key])//從當前行返回
  return settings.currentRow[key];
 if (settings.paramFrom) { //從指定控件返回
  var ctrl = mini.get(settings.paramFrom);
  if (ctrl == undefined) {
  $.messager.alert({ title: 'UI出錯', msg: "Id為" + settings.paramFrom + "的控件不存在!", icon: "error" });  
  return;
  }
  else if (ctrl.showCheckBox) {
  return getValues(ctrl.getCheckedNodes(), key);
  }
  else if (ctrl.getSelecteds)
  return getValues(ctrl.getSelecteds(), key);
  else if (ctrl.getValue)
  return ctrl.getValue();
 }

 return e;
 });

 settings[pty] = result;
 return result;
}

//轉化為全路徑
function changeToFullUrl(settings) {
 var url = settings.url;
 if (url.indexOf('/') == 0 || url.indexOf("http://") == 0 || url.indexOf('?') == 0 || url == "")
 return url;


 currentUrlPathName = window.location.pathname;

 var currentPathNameParts = currentUrlPathName.split('/');
 var pathNameParts = url.split('?')[0].split('/');
 if (currentPathNameParts[currentPathNameParts.length - 1] == "")
 currentPathNameParts.pop(); //去掉一個反斜線
 if (pathNameParts[pathNameParts.length - 1] == "")
 pathNameParts.pop(); //去掉一個反斜線


 var index = currentPathNameParts.length - 1;

 for (var i = 0; i  pathNameParts.length; i++) {
 if (pathNameParts[i] == "..") {
  index = index - 1;
  if (index = 0) {
  $.messager.alert({ title: "系統異常", msg: "Url錯誤:" + url + "!", icon: "error" });
return;
  }
  continue;
 }

 if (index  currentPathNameParts.length)
  currentPathNameParts[index] = pathNameParts[i];
 else
  currentPathNameParts.push(pathNameParts[i]);
 index = index + 1;
 }
 var length = currentPathNameParts.length;
 for (var i = index; i  length; i++) {
 currentPathNameParts.pop();
 }

 var result = currentPathNameParts.join('/');

 if (url.indexOf('?') > 0)
 result += url.substring(url.indexOf('?'));

 settings.url = result;
}

我們期望簡潔的后臺代碼,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using formula;
using System.Data;

namespace demo.Areas.basic.Controllers
{
 public class customerController : BaseController
 {
 public JsonResult getList(QueryBuilder qb)
 {
  SqlHelper sqlHelper = new SqlHelper("demo");
  var data = sqlHelper.ExecuteGridData("select *,id=customerId from customer", qb);
  return Json(data);
 }
 }
}

為了這種簡潔的代碼我們需要:

1、Controller基類BaseController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Data.Entity.Validation;
using System.ComponentModel;
using System.Reflection;
using System.Web.Security;
using formula;

namespace formula
{
 public abstract class BaseController : Controller
 {
 #region 處理不存在的Action

 protected override void HandleUnknownAction(string actionName)
 {
  if (Request.HttpMethod == "POST")
  {
  HttpContext.ClearError();
  HttpContext.Response.Clear();
  HttpContext.Response.StatusCode = 500;
  HttpContext.Response.Write("沒有Action:" + actionName);
  HttpContext.Response.End();
  }

  // 搜索文件是否存在
  var filePath = "";
  if (RouteData.DataTokens["area"] != null)
  filePath = string.Format("~/Areas/{2}/Views/{1}/{0}.cshtml", actionName, RouteData.Values["controller"], RouteData.DataTokens["area"]);
  else
  filePath = string.Format("~/Views/{1}/{0}.cshtml", actionName, RouteData.Values["controller"]);
  if (System.IO.File.Exists(Server.MapPath(filePath)))
  {
  View(filePath).ExecuteResult(ControllerContext);
  }
  else
  {
  HttpContext.ClearError();
  HttpContext.Response.Clear();
  HttpContext.Response.StatusCode = 500;
  HttpContext.Response.Write("沒有Action:" + actionName);
  HttpContext.Response.End();
  }
 }
 #endregion

 #region 基類Json方法重載

 protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior)
 {
  NewtonJsonResult result = new NewtonJsonResult() { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior };

  return result;
 }
 protected override JsonResult Json(object data, string contentType, Encoding contentEncoding)
 {
  NewtonJsonResult result = new NewtonJsonResult() { Data = data, ContentType = contentType, ContentEncoding = contentEncoding };

  return result;
 }

 #endregion

 #region 異常處理

 protected override void OnException(ExceptionContext filterContext)
 {
  Exception exp = filterContext.Exception;
  if (string.IsNullOrEmpty(exp.Message))
  exp = exp.GetBaseException();

  if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
  {
  var response = filterContext.RequestContext.HttpContext.Response;
  response.Clear();
  response.Write(exp.Message);
  response.StatusCode = 500;
  response.End();
  }
 }

 #endregion
 }

}

2、查詢構造器QueryBuilder:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Web.Mvc;

namespace formula
{
 [ModelBinder(typeof(QueryBuilderBinder))]
 public class QueryBuilder : SearchCondition
 {
 public int page { get; set; }
 public int rows { get; set; }
 public string sort { get; set; }
 public string order { get; set; }
 public int total { get; set; }

 public string getOrderByString(bool hasOrderBy = true)
 {
  var sortFields = this.sort.Split(',');
  var sortOrders = this.order.Split(',');

  string str = "";
  for (int i = 0; i  sortFields.Length; i++)
  {
  str += sortFields[i] + " " + sortOrders[i] + ",";
  }
  if (hasOrderBy  str != "")
  str = "order by " + str;
  return str.Trim(',');
 }

 }

 public class SearchCondition
 {
 public string fields = "*";
 private ListConditionItem> quickItems = new ListConditionItem>();
 private ListConditionItem> complexItems = new ListConditionItem>();

 public SearchCondition add(string field, string method, object val, bool isQuickSearch = false)
 {
  //處理日期型數據
  if (method == "" || method == "=")
  {
  if (val.GetType() == typeof(DateTime))
  {
   DateTime t = (DateTime)val;
   val = t.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  }
  }

  ConditionItem item = new ConditionItem(field, method, val);
  if (isQuickSearch)
  quickItems.Add(item);
  else
  complexItems.Add(item);
  return this;
 }


 public string getWhereString(bool hasWhere = true)
 {
  if (quickItems.Count == 0  complexItems.Count == 0)
  return "";

  string strWhere = "";

  if (quickItems.Count > 0)
  strWhere += " and (" + getGourpWhereString(quickItems, true) + ")";
  if (complexItems.Count > 0)
  strWhere += " and (" + getGourpWhereString(complexItems, false) + ")";

  if (hasWhere)
  strWhere = " where " + strWhere.Substring(4);
  else
  strWhere = " and " + strWhere.Substring(4);

  return strWhere;
 }

 #region 私有方法

 private string getGourpWhereString(ListConditionItem> list, bool isOrRelation = false)
 {

  if (list.Count == 0)
  return "";

  string strWhere = "";
  for (int i = 0; i  list.Count(); i++)
  {
  var item = list[i];
  string str = item.getWhereString();

  if (isOrRelation)
  {
   strWhere += " or " + str;
  }
  else
  {
   strWhere += " and " + str;
  }
  }

  strWhere = strWhere.Substring(4);

  return strWhere;
 }


 #endregion

 }

 public class ConditionItem
 {
 public ConditionItem(string field, string method, object val)
 {
  this.field = field;
  this.method = method;
  this.value = val;
 }
 public string field { get; set; }
 public string method { get; set; }
 public object value { get; set; }


 public string getWhereString()
 {
  var item = this;
  switch (item.method)
  {
  case "=":
  case "":
  case ">":
  case "=":
  case ">=":
  case ">":
   return string.Format("{0} {1} '{2}'", item.field, item.method, item.value);
  case "in":
   string v = "";
   if (item.value is ICollection)
   {
   ICollectionstring> collection = item.value as ICollectionstring>;
   v = string.Join("','", collection.ToArraystring>());
   return string.Format("{0} in('{1}')", item.field, v);
   }
   else
   {
   v = item.value.ToString().Replace(",", "','");
   }
   return string.Format("{0} in ('{1}')", item.field, v);
  case "between":
   object[] objs = item.value as object[];
   return string.Format("{0} between '{1}' and '{2}'", item.field, objs[0], objs[1]);
  case "inLike":
   string[] arr = null;
   if (item.value is ICollection)
   {
   ICollectionstring> collection = item.value as ICollectionstring>;
   arr = collection.ToArraystring>();
   }
   else
   {
   arr = item.value.ToString().Split(',', ',');
   }
   string str = "";
   foreach (string s in arr)
   {
   str += string.Format("or {0} like '%{1}%'", item.field, s);
   }
   return "(" + str.Substring(3) + ")";
  case "day":
   DateTime dt = DateTime.Now;
   if (!DateTime.TryParse(item.value.ToString(), out dt))
   {
   throw new BuessinessException("查詢條件不能轉化為日期時間");
   }
   string start = dt.Date.ToString("yyyy-MM-dd");
   string end = dt.Date.AddDays(1).ToString("yyyy-MM-dd");
   return string.Format("{0} between '{1}' and '{2}'", item.field, start, end);
  case "startWith":
   return string.Format("{0} like '{1}%'", item.field, item.value);
  case "endWith":
   return string.Format("{0} like '%{1}'", item.field, item.value);
  default:
   return "";
  }



 }
 }
}

3、查詢構造器QueryBuilder的創建方法QueryBuilderBinder:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;

namespace formula
{
 public class QueryBuilderBinder : IModelBinder
 {
 public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
 {
  var qb = (QueryBuilder)(bindingContext.Model ?? new QueryBuilder());
  var dict = controllerContext.HttpContext.Request.Params;

  var quickQueryList = !string.IsNullOrEmpty(dict["quickQueryData"]) ? JsonHelper.ToList(dict["quickQueryData"]) : new ListDictionarystring, object>>();
  var queryList = !string.IsNullOrEmpty(dict["queryData"]) ? JsonHelper.ToList(dict["queryData"]) : new ListDictionarystring, object>>();

  foreach (var dic in quickQueryList)
  {
  var val = dic["value"].ToString();
  if (val == "") continue;
  qb.add(dic["field"].ToString(), dic["method"].ToString(), val, true);
  }

  foreach (var dic in queryList)
  {
  var val = dic["value"].ToString();
  if (val == "") continue;
  qb.add(dic["field"].ToString(), dic["method"].ToString(), val, false);
  } 

  qb.page = !string.IsNullOrEmpty(dict["page"]) ? int.Parse(dict["page"].ToString()) : 1;
  qb.rows = !string.IsNullOrEmpty(dict["rows"]) ? int.Parse(dict["rows"].ToString()) : 10;
  qb.sort = !string.IsNullOrEmpty(dict["sort"]) ? dict["page"].ToString() : "id";
  qb.order = !string.IsNullOrEmpty(dict["order"]) ? dict["order"].ToString() : "desc";

  return qb;

 }
 }
}

4、數據庫查詢幫助類SqlHelper:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Web;

namespace formula
{
 public class SqlHelper
 {
 #region 構造函數

 public SqlHelper(string connName)
 {
  if (System.Configuration.ConfigurationManager.ConnectionStrings[connName] == null)
  throw new BuessinessException(string.Format("配置文件中不包含數據庫連接字符串:{0}", connName));
  this.connName = connName;
  this.connString = System.Configuration.ConfigurationManager.ConnectionStrings[connName].ConnectionString;
 }

 public string connName { get; private set; }
 public string connString { get; private set; }
 public string dbName
 {
  get
  {
  SqlConnection conn = new SqlConnection(connString);
  return conn.Database;
  }
 }

 #endregion

 #region 基本方法

 public object ExecuteScalar(string cmdText)
 {
  using (SqlConnection conn = new SqlConnection(connString))
  {
  conn.Open();
  SqlCommand cmd = new SqlCommand(cmdText, conn);
  return cmd.ExecuteScalar();  
  }
 }



 public DataTable ExecuteDataTable(string cmdText)
 {
  using (SqlConnection conn = new SqlConnection(connString))
  {
  DataTable dt = new DataTable();
  SqlDataAdapter apt = new SqlDataAdapter(cmdText, conn);
  apt.Fill(dt);
  return dt;
  }
 }

 public DataTable ExecuteDataTable(string cmdText, int start, int len)
 {
  using (SqlConnection conn = new SqlConnection(connString))
  {
  DataTable dt = new DataTable();
  SqlDataAdapter apt = new SqlDataAdapter(cmdText, conn);
  apt.Fill(start, len, dt);
  return dt;
  }
 }


 public string ExecuteNonQuery(string cmdText)
 {
  using (SqlConnection conn = new SqlConnection(connString))
  {
  conn.Open();
  SqlCommand cmd = new SqlCommand(cmdText, conn);
  return cmd.ExecuteNonQuery().ToString();
  }
 }

 #endregion

 #region 支持查詢對象

 public DataTable ExecuteDataTable(string sql, SearchCondition cnd, string orderBy)
 {
  string sqlWhere = " where 1=1" + GetUrlFilterSqlWhere(sql) + cnd.getWhereString(false);
  sql = string.Format("select {0} from ({1}) sourceTable {2} {3}", cnd.fields, sql, sqlWhere, orderBy);
  DataTable dt = this.ExecuteDataTable(sql);
  return dt;
 }

 public Dictionarystring, object> ExecuteGridData(string sql, QueryBuilder qb)
 {
  string sqlWhere = " where 1=1" + GetUrlFilterSqlWhere(sql) + qb.getWhereString(false);

  qb.total = (int)this.ExecuteScalar(string.Format("select count(1) from ({0}) sourceTable {1}", sql, sqlWhere));

  sql = string.Format("select {0} from ({1}) sourceTable {2} {3}", qb.fields, sql, sqlWhere, qb.getOrderByString());
  DataTable dt = ExecuteDataTable(sql, (qb.page - 1) * qb.rows, qb.rows);

  Dictionarystring, object> dic = new Dictionarystring, object>();
  dic.Add("total", qb.total);
  dic.Add("rows", dt);  
  return dic;
 }

 #endregion

 #region 私有方法

 private string GetUrlFilterSqlWhere(string sql)
 {
  sql = string.Format("select * from({0}) as dt1 where 1=2", sql);
  var dtField = ExecuteDataTable(sql);

  StringBuilder sb = new StringBuilder();
  foreach (string key in HttpContext.Current.Request.QueryString.Keys)
  {
  if (string.IsNullOrEmpty(key) || key.ToLower() == "id")
   continue;

  if (dtField.Columns.Contains(key))
  {
   string value = HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request[key]);
   value = value.Replace(",", "','");
   sb.AppendFormat(" and {0} in ('{1}')", key, value);
  }
  }
  return sb.ToString();
 }

 #endregion

 }
}

5、用于取代返回值JsonResult的NewtonJsonResult:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web;
using System.Data;

namespace formula
{
 public class NewtonJsonResult : JsonResult
 {
 public override void ExecuteResult(ControllerContext context)
 {
  //確認是否用于響應HTTP-Get請求
  if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet 
  string.Compare(context.HttpContext.Request.HttpMethod, "GET", true) == 0)
  {
  throw new InvalidOperationException("禁止Get請求");
  }

  HttpResponseBase response = context.HttpContext.Response;
  //設置媒體類型和編碼方式
  response.ContentType = string.IsNullOrEmpty(this.ContentType) ?
  "application/json" : this.ContentType;
  if (this.ContentEncoding != null)
  {
  response.ContentEncoding = this.ContentEncoding;
  }

  //序列化對象,并寫入當前的HttpResponse
  if (null == this.Data) return;


  if (this.Data is string)
  {
  response.Write(Data);
  }
  else if (this.Data is DataRow)
  {
  Dictionarystring, object> dic = new Dictionarystring, object>();
  DataRow row = this.Data as DataRow;
  foreach (DataColumn col in row.Table.Columns)
  {
   dic.Add(col.ColumnName, row[col]);
  }
  response.Write(JsonHelper.ToJson(dic));
  }
  else
  {
  response.Write(JsonHelper.ToJson(this.Data));
  }
 }
 }

}

6、Json序列化和反序列的幫助類JsonHelper:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json;

namespace formula
{
 public static class JsonHelper
 {
 public static string ToJsonT>(T obj)
 {

  if (obj == null || obj.ToString() == "null") return null;

  if (obj != null  (obj.GetType() == typeof(String) || obj.GetType() == typeof(string)))
  {
  return obj.ToString();
  }

  IsoDateTimeConverter dt = new IsoDateTimeConverter();
  dt.DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss";
  return JsonConvert.SerializeObject(obj, dt);

 }

 /// summary> 
 /// 從一個Json串生成對象信息 
 /// /summary> 
 /// param name="jsonString">JSON字符串/param> 
 /// typeparam name="T">對象類型/typeparam>  
 /// returns>/returns> 
 public static T ToObjectT>(string json) where T : class
 {
  if (String.IsNullOrEmpty(json)) return null;
  T obj = JsonConvert.DeserializeObjectT>(json);
  return obj;
 }

 /// summary>
 /// 返回 Dictionstring,object>
 /// /summary>
 /// param name="json">/param>
 /// returns>/returns>
 public static Dictionarystring, object> ToObject(string json)
 {
  if (String.IsNullOrEmpty(json)) return new Dictionarystring, object>();
  return ToObjectDictionarystring, object>>(json);
 }

 /// summary>
 /// 返回 ListDictionarystring, object>>
 /// /summary>
 /// param name="json">/param>
 /// returns>/returns>
 public static ListDictionarystring, object>> ToList(string json)
 {
  if (String.IsNullOrEmpty(json)) return new ListDictionarystring, object>>();
  return ToObjectListDictionarystring, object>>>(json);
 }

 /// summary>
 /// 組裝對象
 /// /summary>
 /// param name="json">/param>
 /// param name="obj">/param>
 public static void PopulateObject(string json, object obj)
 {
  if (String.IsNullOrEmpty(json)) return;
  JsonConvert.PopulateObject(json, obj);
 }
 }
}

7、用于區分系統異常和業務異常的BusinessException:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace formula
{
 /// summary>
 /// 業務異常
 /// /summary> 
 [Serializable]
 public class BuessinessException : Exception
 {
 /// summary>
 /// 系統異常構造函數
 /// /summary>
 public BuessinessException()
 {

 }

 /// summary>
 /// 系統異常構造函數
 /// /summary>
 /// param name="message">異常的消息/param>
 public BuessinessException(string message)
  : base(message)
 {

 }

 /// summary>
 /// 系統異常構造函數
 /// /summary>
 /// param name="message">異常的消息/param>
 /// param name="inner">內部的異常/param>
 public BuessinessException(string message, System.Exception inner)
  : base(message, inner)
 {

 }

 /// summary>
 /// 系統異常構造函數
 /// /summary>
 /// param name="info">存有有關所引發異常的序列化的對象數據/param>
 /// param name="context">包含有關源或目標的上下文信息/param>
 public BuessinessException(SerializationInfo info, StreamingContext context)
  : base(info, context)
 {

 }
 }
}

最后,上代碼:http://xiazai.jb51.net/201604/yuanma/ASP.NET-MVC-EasyUI-sampleFrame%28jb51.net%29.rar

您可能感興趣的文章:
  • asp.net mvc 從數據庫中讀取圖片的實現代碼
  • asp.net mvc4 mysql制作簡單分頁組件(部分視圖)
  • 使用jQuery向asp.net Mvc傳遞復雜json數據-ModelBinder篇
  • ASP.NET MVC DropDownList數據綁定及使用詳解
  • ASP.NET中MVC從后臺控制器傳遞數據到前臺視圖的方式
  • Asp.net mvc 數據調用示例代碼
  • ASP.NET MVC 數據驗證及相關內容
  • ASP.NET Mvc開發之刪除修改數據
  • ASP.NET中MVC傳遞數據的幾種形式總結
  • ASP.NET Mvc開發之查詢數據
  • JQuery對ASP.NET MVC數據進行更新刪除
  • asp.net實現的MVC跨數據庫多表聯合動態條件查詢功能示例
  • ASP.NET MVC使用EPPlus,導出數據到Excel中

標簽:汕頭 吉林 重慶 本溪 婁底 河南 麗江 宜春

巨人網絡通訊聲明:本文標題《利用ASP.NET MVC+EasyUI+SqlServer搭建企業開發框架》,本文關鍵詞  利用,ASP.NET,MVC+EasyUI+SqlServer,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用ASP.NET MVC+EasyUI+SqlServer搭建企業開發框架》相關的同類信息!
  • 本頁收集關于利用ASP.NET MVC+EasyUI+SqlServer搭建企業開發框架的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲精品国产一区二区精华液| 欧美综合视频在线观看| 色天天综合色天天久久| wwwwxxxxx欧美| 日韩av一级片| 欧美一级二级三级乱码| 国产欧美一区二区精品性色超碰| 蜜桃精品视频在线| 欧美三级一区二区| 国产精品国模大尺度视频| 国产福利91精品| 国产日韩视频一区二区三区| 欧美日韩在线播放三区| 欧美精品久久久久久久久老牛影院| 99精品视频在线播放观看| 岛国av在线一区| 成av人片一区二区| 欧美亚洲日本国产| 日韩亚洲欧美一区二区三区| 久久伊人蜜桃av一区二区| 日韩欧美国产小视频| 亚洲国产成人一区二区三区| 亚洲毛片av在线| 日韩中文字幕不卡| 韩国三级在线一区| 成人av动漫网站| 欧美一级专区免费大片| yourporn久久国产精品| 欧美日韩在线精品一区二区三区激情 | 婷婷久久综合九色综合绿巨人| 性久久久久久久久久久久| 国内精品国产成人| 一本大道久久a久久综合| 91精品久久久久久久99蜜桃| 久久久久国产精品麻豆ai换脸 | 日韩欧美精品在线| 国产精品情趣视频| 日韩黄色在线观看| 国产精品一区2区| 欧美日韩中字一区| 国产精品美女久久久久高潮| 天天色天天爱天天射综合| 国内成人精品2018免费看| 欧美人成免费网站| 亚洲一卡二卡三卡四卡五卡| 国产成人精品一区二| 91精品国产一区二区| 亚洲午夜久久久久久久久电影网 | 日韩视频123| 亚洲理论在线观看| 奇米四色…亚洲| 91亚洲国产成人精品一区二区三 | 韩国一区二区三区| 欧美日韩不卡视频| 玉米视频成人免费看| 精品在线免费观看| 日韩亚洲欧美成人一区| 天堂精品中文字幕在线| 欧美私人免费视频| 亚洲午夜精品网| 欧美剧情电影在线观看完整版免费励志电影 | 丁香激情综合国产| 国产精品入口麻豆九色| 国产成人一区在线| 亚洲国产精品av| 欧美一级在线免费| 偷拍亚洲欧洲综合| 26uuu亚洲婷婷狠狠天堂| 欧美丰满美乳xxx高潮www| 精一区二区三区| 国产午夜精品在线观看| 成人av在线影院| 亚洲乱码日产精品bd| 在线免费av一区| 五月开心婷婷久久| 成人不卡免费av| 日韩美女精品在线| 99r精品视频| 亚洲精品综合在线| 欧美电影在线免费观看| 蜜桃传媒麻豆第一区在线观看| 亚洲精品一区二区三区蜜桃下载 | 亚洲欧美日韩系列| 在线电影一区二区三区| 国产一区二区三区免费观看| 中文字幕一区二区三区在线观看| 91亚洲资源网| 久久精品久久精品| 亚洲精品免费视频| 亚洲精品成人天堂一二三| 日韩欧美国产一区在线观看| 激情久久久久久久久久久久久久久久| 国产日韩av一区二区| 制服.丝袜.亚洲.中文.综合 | 中文字幕欧美激情一区| 91久久奴性调教| 成人综合婷婷国产精品久久 | 香蕉乱码成人久久天堂爱免费| 久久麻豆一区二区| 在线观看欧美日本| 国产91高潮流白浆在线麻豆| 久久国产精品无码网站| 亚洲国产精品人人做人人爽| 国产精品久久久久久久久果冻传媒 | 91在线你懂得| 欧美色老头old∨ideo| 久久久久久免费| 奇米777欧美一区二区| 色素色在线综合| 国产人伦精品一区二区| 日韩av电影一区| 午夜精彩视频在线观看不卡| 欧美成人性福生活免费看| 国产婷婷一区二区| 一区二区三区四区国产精品| 丝袜美腿亚洲综合| 国产99久久久久| 色欧美日韩亚洲| 精品国产乱码久久久久久牛牛 | 91在线观看美女| 欧美精品第1页| 国产精品视频一二三区| 亚洲国产精品久久人人爱| 精品一区二区三区的国产在线播放| 激情五月婷婷综合| 欧美视频你懂的| 国产精品久久久99| 国产精品自拍一区| 欧美日韩国产在线播放网站| 中文文精品字幕一区二区| 亚洲欧美激情一区二区| 国产成人鲁色资源国产91色综| 欧美午夜片在线看| ●精品国产综合乱码久久久久| 久久99国内精品| 91精品国产色综合久久ai换脸 | 在线亚洲免费视频| 床上的激情91.| 国产91露脸合集magnet| 久久久不卡网国产精品一区| 热久久一区二区| 亚洲一区二区av电影| 一区二区在线观看不卡| 国产性做久久久久久| 久久久久亚洲蜜桃| 中文字幕日本不卡| 亚洲国产日日夜夜| 成人免费毛片高清视频| 日韩精品资源二区在线| 午夜私人影院久久久久| 欧美视频第二页| 欧美高清激情brazzers| 欧美岛国在线观看| 国产精品少妇自拍| 成人综合在线观看| 亚洲欧美一区二区三区国产精品 | 99精品视频免费在线观看| 一区二区三区四区av| 56国语精品自产拍在线观看| 久久国产精品色婷婷| 国产欧美日韩卡一| 一本大道久久精品懂色aⅴ| 一区二区三区色| 日韩一级二级三级精品视频| 亚洲免费在线看| 久久成人久久爱| 国产日韩成人精品| 日本黄色一区二区| 久国产精品韩国三级视频| 欧美国产97人人爽人人喊| 这里只有精品视频在线观看| 国产一区二区精品久久91| 亚洲男女一区二区三区| 精品国产自在久精品国产| 欧美在线看片a免费观看| 国产成人综合在线| 日本三级韩国三级欧美三级| 成人欧美一区二区三区白人 | 日韩精品乱码免费| 亚洲色图清纯唯美| 中文字幕的久久| 久久久久久日产精品| 欧美一区二区女人| 在线欧美日韩精品| 色综合久久久久| 成人爱爱电影网址| 不卡视频一二三四| 成+人+亚洲+综合天堂| 国产成人一级电影| 国产成人精品亚洲日本在线桃色| 久久精品国产亚洲高清剧情介绍 | 亚洲欧美韩国综合色| 一区二区三区四区av| 国产欧美一区二区三区鸳鸯浴| 欧美一级欧美一级在线播放| 欧美日韩你懂得| 日韩欧美国产一区二区在线播放| 欧美一区二区三区在线电影| 欧美一级片在线观看| 欧美哺乳videos|