出自ProgWiki
用途
- 為了簡化ASP.NET彈出式選項視窗的程式而寫的。(需配合AjaxControlToolkit使用)
程式碼
#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("\"", """).Replace("'", "\\'");
else
raw2 = raw2.Replace("'", "\\'").Replace("\"", "\\\"");
return raw2;
}
#endregion ToString, OutputToClient, JSStringEscape
}
使用範例
<%@ 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>
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);
}
}