JavaScriptTool.cs

出自ProgWiki

跳轉到: 導航, 搜尋

目錄

用途

程式碼

#define _UseJQuery
 
//參照
//	http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/
 
using System;
using System.Web;
using System.Web.UI;
using System.Text;
 
/// <summary>
/// JavaScriptTool 的摘要描述
/// </summary>
public class JavaScriptTool
{
	public JavaScriptTool()
	{
		//
		// TODO: 在此加入建構函式的程式碼
		//
	}
 
	StringBuilder sb = new StringBuilder();
 
	#region OpenScriptBlack, CloseScriptBlack
 
	public JavaScriptTool OpenScriptBlack()
	{
		sb.Length = 0;
		sb.Append("<script type=\"text/javascript\">\n/*<![CDATA[*/\n");
		return this;
	}
 
	public JavaScriptTool CloseScriptBlack()
	{
		sb.Append("\n/*]]>*/\n</script>");
		return this;
	}
 
	#endregion OpenScriptBlack, CloseScriptBlack
 
	#region alert, assert, debug
 
	public JavaScriptTool alert(string strMsg)
	{
        	alert(strMsg, "提示");
	        return this;
	}
 
	public JavaScriptTool alert(string strMsg, string strTitle)
	{
#if (_UseJQuery)
		sb.AppendFormat(
			"jAlert('{0}', '{1}');",
			JSStringEscape(strMsg, false),
			JSStringEscape(strTitle, false)
		);
#else
		sb.AppendFormat(
			"alert('{0}');",
			JSStringEscape(strMsg, false));
#endif
	        return this;
	}
 
 
	public static void alert(Page thisPage, string strMsg)
	{
		JavaScriptTool jst = new JavaScriptTool();
		jst.OpenScriptBlack()
			.alert(strMsg)
			.CloseScriptBlack()
			.OutputToClient(thisPage);
	}
 
	public JavaScriptTool alert2redirect(string strMsg, string strUrl)
	{
#if (_UseJQuery)
		sb.AppendFormat(
            		"jAlert('{0}', '{1}', function() ",
			JSStringEscape(strMsg, false),
			JSStringEscape("提示", false)).Append("{");
 
		this.redirect(strUrl);
 
		sb.Append("});");
#else
		sb.AppendFormat(
			"alert('{0}');location.href='{1}';return false;",
			JSStringEscape(strMsg, false),
			strUrl);
#endif
		return this;
	}
 
	public JavaScriptTool assert(bool IsAssert, string strDebugMsg)
	{
		if (IsAssert == false)
			alert(strDebugMsg, "Debug");
 
		return this;
	}
 
	public static void assert(Page thisPage, bool IsAssert, string strDebugMsg)
	{
		if (IsAssert == false)
			JavaScriptTool.alert(thisPage, strDebugMsg);
	}
 
	public static void debug(Page thisPage, string strDebugMsg)
	{
		JavaScriptTool.alert(thisPage, strDebugMsg);
	}
 
	#endregion alert, assert, debug
 
	#region confirm
 
	public static void confirm(Page thisPage, string strMsg, string strTitle, string strCallback)
	{
		JavaScriptTool jst = new JavaScriptTool();
		jst.OpenScriptBlack()
			.confirm(strMsg, strTitle, strCallback)
			.CloseScriptBlack()
			.OutputToClient(thisPage);
	}
 
	public JavaScriptTool confirm(string strMsg, string strTitle, string strCallback)
	{
#if (_UseJQuery)
		sb.AppendFormat("jConfirm('{0}', '{1}', function(bConfirmed) {\n{2}\n});",
            		JSStringEscape(strMsg, false),
			JSStringEscape(strTitle, false),
			strCallback
			);
#else
		sb.AppendFormat("bConfirmed=confirm('{0}');{2}\n});",
			JSStringEscape(strMsg, false),
			JSStringEscape(strTitle, false),
			strCallback
			);
#endif
		return this;
	}
 
	#endregion confirm
 
	#region eval
	public JavaScriptTool eval(string strJS)
	{
		sb.Append(strJS);
		return this;
	}
 
	public static void eval(Page thisPage, string strJS)
	{
		JavaScriptTool jst = new JavaScriptTool();
		jst.OpenScriptBlack()
			.eval(strJS)
			.CloseScriptBlack()
			.OutputToClient(thisPage);
	}
 
	#endregion eval
 
	#region redirect, ...
 
	public JavaScriptTool RedirectToLoginPage()
	{
		sb.AppendFormat("window.opener.location.href='{0}';", 
			"..\\Login.aspx");
		return this;
	}
 
	public JavaScriptTool redirect(string strUrl)
	{
		sb.AppendFormat("location.href='{0}';",
			strUrl);
		return this;
	}
 
	public JavaScriptTool redirect(string strUrl, string strFrameName)
	{
		sb.AppendFormat("{0}.location.href='{1}';",
				strFrameName,
				strUrl);
		return this;
	}
 
	#endregion redirect, ...
 
	#region windowClose, setOpenerValue, setOpenerInnerText...
 
	public JavaScriptTool windowClose()
	{
		sb.Append("window.close();");
		return this;
	}
 
	public JavaScriptTool setOpenerValue(string strID, string strValue)
	{
		sb.AppendFormat("window.opener.document.getElementById('{0}').value='{1}';",
			strID,
			JSStringEscape(strValue.Replace(" ", "").Trim(), false));
		return this;
	}
 
	public JavaScriptTool setOpenerInnerText(string strID, string strValue)
	{
		sb.AppendFormat("window.opener.document.getElementById('{0}').innerText='{1}';",
			strID,
			JSStringEscape(strValue.Replace(" ", "").Trim(), false));
		return this;
	}
 
	public JavaScriptTool execOpenerFunc(string strID, string strFunc)
	{
		sb.AppendFormat("window.opener.document.getElementById('{0}').{1};",
			strID,
			strFunc);
		return this;
	}
 
	#endregion windowClose, setOpenerValue, setOpenerInnerText...
 
	#region ToString, OutputToClient, JSStringEscape
 
	public override string ToString()
	{
		return sb.ToString();
	}
 
	public void OutputToClient(Control control)
	{
        	string strKey = Guid.NewGuid().ToString();
        	string strScript = sb.ToString();
 
        	//if (Type.GetType("AjaxControlToolkit.ToolkitScriptManager") != null)
        	if ((control.Page.FindControl("ToolkitScriptManager1") != null) ||
        	    (control.Page.Master.FindControl("ToolkitScriptManager1") != null))
        	{
            		AjaxControlToolkit.ToolkitScriptManager.RegisterClientScriptBlock(control.Page, control.GetType(), strKey, strScript, false);
        	}
		else if (ScriptManager.GetCurrent(control.Page) != null)
		{
			ScriptManager.RegisterStartupScript(control.Page, control.GetType(), strKey, strScript, false);
		}
		else
		{
			control.Page.ClientScript.RegisterStartupScript(control.GetType(), strKey, strScript, false);
		}
	}
 
	private string JSStringEscape(string raw, bool inHtmlAttribute)
	{
		string raw2 = raw.Replace("\r\n", "\\n").Replace("\r", "").Replace("\n", "\\n");
		if (inHtmlAttribute)
			raw2 = raw2.Replace("\"", "&quot;").Replace("'", "\\'");
		else
			raw2 = raw2.Replace("'", "\\'").Replace("\"", "\\\"");
		return raw2;
	}
 
	#endregion ToString, OutputToClient, JSStringEscape
}

使用範例

PopupCalendar.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PopupCalendar.aspx.cs" Inherits="PopupCalendar" %>
 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>選擇日期</title>
</head>
<body leftmargin="0" topmargin="0" onBlur="focus()">
    <form id="form1" runat="server">
    <div>
		<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="True" EnableScriptLocalization="True">
		</cc1:ToolkitScriptManager>
        <asp:Calendar ID="Calendar1" runat="server" BackColor="#FFFFCC" BorderColor="#FFCC66" DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt"
            ForeColor="#663399" Height="200px" Width="220px" OnSelectionChanged="Calendar1_SelectionChanged" BorderWidth="1px" ShowGridLines="True">
            <SelectedDayStyle BackColor="#CCCCFF" Font-Bold="True" />
            <TodayDayStyle BackColor="#FFCC66" ForeColor="White" />
            <SelectorStyle BackColor="#FFCC66" />
            <OtherMonthDayStyle ForeColor="#CC9966" />
            <NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" />
            <DayHeaderStyle BackColor="#FFCC66" Font-Bold="True" Height="1px" />
            <TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt" ForeColor="#FFFFCC" /> 
        </asp:Calendar>
 
    </div>
    </form>
</body>
</html>

PopupCalendar.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
 
public partial class PopupCalendar : System.Web.UI.Page
{
    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
		string returnValue = Calendar1.SelectedDate.ToShortDateString();
 
		JavaScriptTool jst = new JavaScriptTool();
		jst.OpenScriptBlack()
			.setOpenerInnerText(Request.QueryString["ClientID"], returnValue)
			.windowClose()
			.CloseScriptBlack()
			.OutputToClient(this.Page);
    }
}
個人工具
名字空間
變換
動作
導航
分類
其他
技術類News或部落格
工具箱