json表單回填(表單反序列化回填值)

 以前用ajax作添加 用到了表單序列化來取頁面form的值
    var ifmdata = $('#ifm').serialize();//表單序列化
而後ajax
$.post('/S_UserInfo/SaveUserInfo', ifmdata, function (data)
            {
                ~~~~
            })
---------那麼頁面加載的時候 好比作修改,首先要加載要修改的對象的數據到頁面表單上。
那麼就能夠這樣搞:
首先你要引用一個jq
<script src="/Content/js/jquery.min.js"></script>
而後你再把下面的腳本複製
<script>
 
    $.fn.extend({
        //表單加載json對象數據
        setForm: function (jsonValue) {
            var obj = this;
            $.each(jsonValue, function (name, ival) {
                var $oinput = obj.find("input[name=" + name + "]");
                if ($oinput.attr("type") == "checkbox") {
                    if (ival !== null) {
                        var checkboxObj = $("[name=" + name + "]");
                        var checkArray = ival.split(";");
                        for (var i = 0; i < checkboxObj.length; i++) {
                            for (var j = 0; j < checkArray.length; j++) {
                                if (checkboxObj[i].value == checkArray[j]) {
                                    checkboxObj[i].click();
                                }
                            }
                        }
                    }
                }
                else if ($oinput.attr("type") == "radio") {
                    $oinput.each(function () {
                        var radioObj = $("[name=" + name + "]");
                        for (var i = 0; i < radioObj.length; i++) {
                            if (radioObj[i].value == ival) {
                                radioObj[i].click();
                            }
                        }
                    });
                }
                else if ($oinput.attr("type") == "textarea") {
                    obj.find("[name=" + name + "]").html(ival);
                }
                else {
                    obj.find("[name=" + name + "]").val(ival);
                }
            })
 
        }
    });
</script>
 
上面這是基於jq擴展的一個方法setForm
這樣就能夠使用setForm這個函數了
具體使用以下:
//當頁面加載的時候 執行下面腳本
   var _uid = getUrlParam("uid");//首先獲取地址欄參數 一般是這個修改的對象的id
        if (_uid != null) {//判斷ID不爲空
            $.post('/S_UserInfo/GetUserInfo', { uid: _uid }, function (data) {//那麼開始從後臺根據ID取這個對象 而且用json返回
                
                $("#ifm").setForm(JSON.parse(data));//這裏就是調用那個擴展的方法來對錶單form進行賦值(不再用一個值一個表單的寫了),注意這裏用到了json2.js須要把json字符串轉換成json對象。
            })
        }
-------------------------至於後臺代碼也貼個把 根據id獲取對象 而且返回json
   //根據ID獲取用戶對象json
        public ActionResult GetUserInfo(int uid)
        {
            InterViewCommon.SmileAngel sa = new InterViewCommon.SmileAngel();
            if (uid > 0)
            {
                var modelUser = sa.GetModel<InterViewModel.s_userinfo>("s_userinfo", "*", "u_id=" + uid);
                MyJsonHelp jsonhelp = new MyJsonHelp();
                return  jsonhelp.MyJson(modelUser, "yyyy-MM-dd");
               
            }
            return null;
        }
 
這個函數用到了最新的 微笑天使類,數據庫新嘗試使用的mysql(在使用過程當中發現mysql的sql語句仍是有些不一樣的,因此須要靈活更改底層方法),這裏有用到了一個json幫助類 目的就是解決日期格式,mvc默認的json轉換會把日期轉換成一大堆……&#……@&……¥#@*。
-----------------------算了 送佛送到西,把json幫助類也貼出來把。。。。
一共須要兩個類:  CustomJsonResult  和 MyJsonHelp 以下:
 
public class CustomJsonResult : JsonResult
    {
        /// <summary>
        /// 格式化字符串
        /// </summary>
        public string FormateStr
        {
            get;
            set;
        }
 
        /// <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)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                string jsonString = jss.Serialize(Data);
                string p = @"\\/Date\((\d+)\)\\/";
                MatchEvaluator matchEvaluator = new MatchEvaluator(this.ConvertJsonDateToDateString);
                Regex reg = new Regex(p);
                jsonString = reg.Replace(jsonString, matchEvaluator);
 
                response.Write(jsonString);
            }
        }
 
        /// <summary>  
        /// 將Json序列化的時間由/Date(1294499956278)轉爲字符串 .
        /// </summary>  
        /// <param name="m">正則匹配</param>
        /// <returns>格式化後的字符串</returns>
        private string ConvertJsonDateToDateString(Match m)
        {
            string result = string.Empty;
            DateTime dt = new DateTime(1970, 1, 1);
            dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
            dt = dt.ToLocalTime();
            result = dt.ToString(FormateStr);
            return result;
        }
    }
 
------------------
  public class MyJsonHelp : Controller
    {
 
        #region 重寫json
 
        /// 返回JsonResult
        /// </summary>
        /// <param name="data">數據</param>
        /// <param name="contentType">內容類型</param>
        /// <param name="contentEncoding">內容編碼</param>
        /// <param name="behavior">行爲</param>
        /// <returns>JsonReuslt</returns>
        protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
        {
            return new CustomJsonResult
            {
                Data = data,
                ContentType = contentType,
                ContentEncoding = contentEncoding,
                JsonRequestBehavior = behavior,
                FormateStr = "yyyy-MM-dd HH:mm:ss"
            };
        }
 
        /// <summary>
        /// 返回JsonResult.24         /// </summary>
        /// <param name="data">數據</param>
        /// <param name="behavior">行爲</param>
        /// <param name="format">json中dateTime類型的格式</param>
        /// <returns>Json</returns>
        public JsonResult MyJson(object data, JsonRequestBehavior behavior, string format)
        {
            return new CustomJsonResult
            {
                Data = data,
                JsonRequestBehavior = behavior,
                FormateStr = format
            };
        }
 
        /// <summary>
        /// 返回JsonResult42         /// </summary>
        /// <param name="data">數據</param>
        /// <param name="format">數據格式</param>
        /// <returns>Json</returns>
        public JsonResult MyJson(object data, string format)
        {
            return new CustomJsonResult
            {
                Data = data,
                FormateStr = format
            };
        }
        /// 返回JsonResult
        /// </summary>
        /// <param name="data">數據</param>
        /// <param name="contentType">內容類型</param>
        /// <param name="contentEncoding">內容編碼</param>
        /// <param name="behavior">行爲</param>
        /// <returns>JsonReuslt</returns>
        public JsonResult Json4(object data, string contentType, System.Text.Encoding contentEncoding, string format)
        {
            return new CustomJsonResult
            {
                Data = data,
                ContentType = contentType,
                ContentEncoding = contentEncoding,
                FormateStr = format
            };
        }
        #endregion
    }
----------------------至於微笑天使那個類之前發過,若是再找不到了能夠諮詢QQ83199235
相關文章
相關標籤/搜索