C# MVC綁定 List 到bootstrap-table列表


1.Dapper返回List<dynamic>對象

    /// <summary>
        /// 獲取候選人推薦的分頁數據
        /// </summary>
        /// <param name="page"></param>
        /// <param name="pageSize"></param>
        /// <param name="candidateName"></param>
        /// <param name="allRowsCount"></param>
        /// <returns></returns>
        public List<dynamic> GetCandidateRecommendPage(int page, int pageSize, string candidateName, out long allRowsCount)
        {
            var sql = @"SELECT  c.Name,c.birthday,c.CVId FROM dbo.Candidate c ";
            var allRowsCountSql = @"SELECT COUNT(0) FROM dbo.Candidate";

            var ret = base.DBSession.Connection.GetPage<dynamic>(page, pageSize, out allRowsCount, sql, null, allRowsCountSql).ToList();
            return ret;
        }

2.Controller層使用Newtonsoft.Json序列化

        public JsonResult GetRecommends(int page, int pageSize, string candidatename)
        {
            var allRowsCount = 0L;

            var list = RpoJobRepository.NewInstance.GetCandidateRecommendPage(page, pageSize, candidatename, out allRowsCount);

            return base.NewtonsoftJson(new { total = allRowsCount, rows = list }, JsonRequestBehavior.AllowGet);
        }
   protected JsonResult NewtonsoftJson(object data, JsonRequestBehavior behavior)
        {
            return new NewtonsoftJsonResult
            {
                Data = data,
                JsonRequestBehavior = behavior,
            };
        }
 /// <summary>
    /// Newtonsoft序列化方式
    /// </summary>
    public class NewtonsoftJsonResult : JsonResult
    {
        /// <summary>
        /// 重寫執行視圖
        /// </summary>
        /// <param name="context">上下文</param>
        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            HttpResponseBase response = context.HttpContext.Response;

            if (string.IsNullOrEmpty(this.ContentType))
            {
                response.ContentType = this.ContentType;
            }
            else
            {
                response.ContentType = "application/json";
            }

            if (this.ContentEncoding != null)
            {
                response.ContentEncoding = this.ContentEncoding;
            }

            if (this.Data != null)
            {
                var jsonString = JsonConvert.SerializeObject(this.Data);
                response.Write(jsonString);
            }
        }

 

3.View層像綁定對象列表一樣綁定

 columns: [{
                checkbox: true
            },
             {
                 field: 'Name',
                 title: '姓名',
                 formatter: this.nameFormatter

             }]

這里的field和第一步里查詢的列名一致。

 

總結

1.dapper的 base.DBSession.Connection.GetPage<dynamic>方法返回的是DapperRow列表,DapperRow 繼承 Dictionary<string, object>

2.controller返回對象時做json序列化,如果使用JavaScriptSerializer,結果是字典的JSON格式,如:

"total":143694,"rows":[[{"Key":"Name","Value":"趙保龍"},{"Key":"birthday","Value":"\/Date(107712000000)\/"},
使用Newtonsoft.Json.JsonConvert 序列化是對象格式,如:
{"total":143694,"rows":[{"Name":"璧典繚榫�","birthday":"1973-06-01T00:00:00","CVId":"JR027902222R90250000000"},{"Name":"閮厛鐢�","birthday":"1981-11-01T00:00:00","CVId":null},

3.使用動態類型不必再去定義ViewModel類了,節省很多時間。

4.還有一種方式是使用DataTable也可以達到相同目的,沒做嘗試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM