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
}
}