using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace Wdj { /// <summary> /// 自定義處理結果抽象類 /// </summary> /// <typeparam name="TEntity">返回數據類型</typeparam> public abstract class ResultHandler<TEntity> { #region 構造函數 /// <summary> /// 操作結果,成功為true,否則為false /// </summary> [JsonProperty("success")] public bool Success { get; set; } /// <summary> /// 操作狀態,True表示狀態正常 /// </summary> [JsonProperty("state")] public bool State { get; set; } /// <summary> /// 來源頁URL地址 /// </summary> [JsonProperty("url")] public string Url { get; set; } /// <summary> /// 操作提示信息 /// </summary> [JsonProperty("msg")] public string Message { get; set; } /// <summary> /// 操作返回數據集合 /// </summary> [JsonProperty("data")] public TEntity Data { get; set; } #endregion #region 初始化 /// <summary> /// 初始化錯誤處理結果抽象類,直接返回提示信息 /// </summary> /// <param name="msg">錯誤提示信息</param> public WdjResultHandler(string msg) { State = false; Message = msg; Success = false; var req = HttpContext.Current.Request; if (req.UrlReferrer != null) { Url = req.UrlReferrer.ToString(); } } /// <summary> /// 初始化處理結果抽象類 /// </summary> public WdjResultHandler() : this(true) { } /// <summary> /// 初始化處理結果抽象類 /// </summary> /// <param name="checkRef">是否檢測操作來源</param> public WdjResultHandler(bool checkRef) { Message = WdjKey.ErrorOperation; Success = false; State = false; var req = HttpContext.Current.Request; if (checkRef) { if (req.UrlReferrer != null) { string myHost = req.Url.Host; string urlHost = req.UrlReferrer.Host; if (myHost.Equals(urlHost, StringComparison.InvariantCultureIgnoreCase)) { Url = req.UrlReferrer.ToString(); State = true; } else { Message = WdjKey.ErrorNoParameters; } } else { Message = WdjKey.ErrorNoParameters; } } else { if (req.UrlReferrer != null) { Url = req.UrlReferrer.ToString(); } State = true; } } #endregion #region 輸出操作結果 /// <summary> /// 輸出操作結果Json字符串 /// </summary> public abstract void WriteJson(); /// <summary> /// 彈出提示信息並返回來源頁面 /// </summary> public string ShowMsgReferrer() { Message = HttpUtility.UrlEncode(Message); string ResultMsgUrl = "<script>parent.layerurl(\"{0}\", {1}, {2}, \"{3}\");</script>"; if (Success) { return string.Format(ResultMsgUrl, Message, 1, 2000, Url); } else { return string.Format(ResultMsgUrl, Message, 9, 3000, Url); } } /// <summary> /// 彈出提示信息並返回指定頁面 /// </summary> /// <param name="url">URL</param> public string ShowMsgUrl(string url) { Message = HttpUtility.UrlEncode(Message); string ResultMsgUrl = "<script>parent.layerurl(\"{0}\", {1}, {2}, \"{3}\");</script>"; if (Success) { return string.Format(ResultMsgUrl, Message, 1, 2000, url); } else { return string.Format(ResultMsgUrl, Message, 9, 3000, url); } } /// <summary> /// 彈出提示信息並在父窗口返回指定頁面 /// </summary> /// <param name="url">URL</param> public string ShowMsgTopUrl(string url) { Message = HttpUtility.UrlEncode(Message); string ResultMsgTopUrl = "<script>parent.layertopurl(\"{0}\", {1}, {2},\"{3}\");</script>"; if (Success) { return string.Format(ResultMsgTopUrl, Message, 1, 2000, url); } else { return string.Format(ResultMsgTopUrl, Message, 9, 3000, url); } } /// <summary> /// 彈出提示信息並返回上一頁 /// </summary> public string ShowMsgBack() { Message = HttpUtility.UrlEncode(Message); string ResultMsgBack = "<script>parent.layerback(\"{0}\", {1}, {2});</script>"; if (Success) { return string.Format(ResultMsgBack, Message, 1, 2000); } else { return string.Format(ResultMsgBack, Message, 9, 3000); } } /// <summary> /// 轉到指定的頁面 /// </summary> public string ShowLoadUrl(string url) { return string.Format("<script>parent.loadurl(\"{0}\");</script>", url); } /// <summary> /// 返回操作結果Json字符串 /// </summary> /// <returns></returns> public string ShowJson() { return JsonConvert.SerializeObject(this, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include }); } /// <summary> /// 輸出操作結果Json字符串 /// </summary> protected void WriteResult() { var rsp = HttpContext.Current.Response; rsp.Clear(); rsp.ContentType = "text/json"; rsp.Write(ShowJson()); } #endregion } }