许多时候需要先执行后台操作进行判断,然后在客户端给用户进行提示。下面的方法比较有效的实现了这一功能。
/// <summary>
/// 从后台弹出alert对话框(页面加载完后执行),相当于添加onload事件
/// </summary>
/// <param name="msg">提示信息内容</param>
public static void Prompt(string msg)
{
string function = "function Alert(){alert(\"" + msg + "\");}";
AddLoadEvent(function);
}
/// <summary>
/// 执行客户端js函数(页面加载完后执行),相当于添加onload事件
/// </summary>
/// <param name="function">
/// 需要执行的js函数语句
/// 调用示例:ExecuteClientFunction("fun(para1, para2);")
/// </param>
/// <returns></returns>
public static void ExecuteClientFunction(string statement)
{
string function = "function ExecuteClientFunction(){ " + statement + "}";
AddLoadEvent(function);
}
/// <summary>
/// 从后台关闭页面(页面加载完后执行),相当于添加onload事件
/// </summary>
public static void ClosePage()
{
string function = "function ClosePage(){ window.close(); }";
AddLoadEvent(function);
}
/// <summary>
/// 从后台跳转页面(页面加载完后执行),相当于添加onload事件
/// </summary>
/// <param name="url">需要跳转的url</param>
public static void Redirect(string url)
{
string function = "function Redirect(){ window.location.href(\"" + url + "\"); }";
AddLoadEvent(function);
}
/// <summary>
/// 添加onload事件
/// </summary>
/// <param name="function">需要添加的方法,该方法不能有参数</param>
private static void AddLoadEvent(string function)
{
string functionName;
int start = function.IndexOf("function ") + 9;
int end = function.IndexOf("()");
functionName = function.Substring(start, end - start).Trim();
string id = Guid.NewGuid().ToString().Replace("-", "");
string newfunctionName = functionName + id;
function = function.Replace(functionName, newfunctionName);
functionName = newfunctionName;
string js = "<script type=\"text/javascript\">" +
function +
"function addLoadEvent" + functionName + "(){" +
"var oldonload = window.onload;" +
"if (typeof window.onload != 'function'){window.onload = " + functionName + ";}" +
"else { window.onload = function(){ oldonload();" + functionName + "();} } }" +
"addLoadEvent" + functionName + "();" +
"</script>";
Page nowp = HttpContext.Current.Handler as Page;
nowp.ClientScript.RegisterStartupScript(nowp.GetType(), Guid.NewGuid().ToString(), js);
}