最近在測動態產生 Menu
MenuItem 全部手動加入 (Menu.Items.Add / Menu.Items[index].ChildItems.Add)
在 MenuItemClick event 要顯示所點選的 MenuItem.Text 時
卻發生永遠只會顯示第一個 ChildItem 的現象
最後才發現
Menu.SelectedItem 應該是透過 Menu.SelectedValue 去比對其下的 MenuItem.Value
來找出該 MenuItem
因為我將所有 MenuItem.Value 都設為相同值
所以 Menu.SelectedItem 抓出來的永遠都是第一個 ChildItem 了
2014年1月15日 星期三
2013年8月19日 星期一
Microsoft Chart Controls 放上 Server 無法顯示圖表
最近在測 Microsoft Chart Controls
在本機測都很正常
一放上 Web Server, 圖表就無法顯示出來
這邊記錄一下解決方法:
1.設定 Chart Control 的 ImageLocation 屬性 (路徑+檔名 [不含副檔名])
2.修改 Chart Control 的 ImageStorageMode 屬性為 "UseImageLocation"
以圖為例
./TempImages/temp
就是將圖檔暫存在網站下的TempImages資料夾中
暫存的圖檔檔名為temp,副檔名就看 Microsoft Chart Controls 設定的檔案格式 (.png / .jpg)
副檔名就看 ImageType 屬性的設定
當使用 UseImageLocation 方式後
會在暫存資料夾中保留圖片
如果不想在 Web Server 上保留圖片的話
需要自行撰寫刪除檔案程式段
在本機測都很正常
一放上 Web Server, 圖表就無法顯示出來
這邊記錄一下解決方法:
1.設定 Chart Control 的 ImageLocation 屬性 (路徑+檔名 [不含副檔名])
2.修改 Chart Control 的 ImageStorageMode 屬性為 "UseImageLocation"
以圖為例
./TempImages/temp
就是將圖檔暫存在網站下的TempImages資料夾中
暫存的圖檔檔名為temp,
副檔名就看 ImageType 屬性的設定
當使用 UseImageLocation 方式後
會在暫存資料夾中保留圖片
如果不想在 Web Server 上保留圖片的話
需要自行撰寫刪除檔案程式段
Microsoft Chart Controls for Microsoft .NET Framework 3.5 範例
最近在測 Microsoft Chart Controls
所以在這邊記錄一下測過的東東
.aspx
.cs
所以在這邊記錄一下測過的東東
.aspx
<asp:Chart ID="Chart1" runat="server" Height="500px" Width="1000"> </asp:Chart>
using System.Web.UI.DataVisualization.Charting; List<string> XLabels = new List<string>(); List<double> YValues = new List<double>(); XLabels.Add("2013/08/01"); XLabels.Add("2013/08/08"); XLabels.Add("2013/08/15"); YValues.Add(21030.0); YValues.Add(45121.0); YValues.Add(45481.0); Chart1.ChartAreas.Add(new ChartArea()); //繪圖區背景顏色 Chart1.ChartAreas[0].BackColor = System.Drawing.Color.LightGreen; //圖表名稱 Chart1.Titles.Add("測試圖表"); //X軸說明 Chart1.ChartAreas[0].AxisX.Title = "日期"; //X軸各數點間區塊隔行變色 Chart1.ChartAreas[0].AxisX.IsInterlaced = true; //X軸邊界不留空格 Chart1.ChartAreas[0].AxisX.IsMarginVisible = false; //X軸刻度(控制X軸最多10個刻度) Chart1.ChartAreas[0].AxisX.Interval = Math.Ceiling(XLabels.Count / 10.0); //Y軸說明 Chart1.ChartAreas[0].AxisY.Title = "金額"; //Y軸刻度 Chart1.ChartAreas[0].AxisY.Interval = 10000; //Y軸刻度加上千分位 Chart1.ChartAreas[0].AxisY.LabelStyle.Format = "#,##0"; //增加圖示 Chart1.Legends.Add(new Legend()); //圖示位置(上方) Chart1.Legends[0].Docking = Docking.Top; //圖示位置(中間) Chart1.Legends[0].Alignment = System.Drawing.StringAlignment.Center; //數線名稱(會顯示在圖示中) Chart1.Series.Add("每週變化"); //數線顏色 Chart1.Series[0].Color = System.Drawing.Color.Red; //數線類型 Chart1.Series[0].ChartType = SeriesChartType.Line; //數線寬度 Chart1.Series[0].BorderWidth = 3; //數點形狀 Chart1.Series[0].MarkerStyle = MarkerStyle.Circle; //數點大小 Chart1.Series[0].MarkerSize = 12; //數點顏色 Chart1.Series[0].MarkerColor = System.Drawing.Color.Red; //在數點上顯示Y軸值 Chart1.Series[0].IsValueShownAsLabel = true; //數點說明文字顏色 Chart1.Series[0].LabelForeColor = System.Drawing.Color.Blue; //數點說明背景顏色 Chart1.Series[0].LabelBackColor = System.Drawing.Color.Yellow; //數點說明加上千分位 Chart1.Series[0].LabelFormat = "#,##0"; //繫結XY座標值-方法1 Chart1.Series[0].Points.DataBindXY(XLabels, YValues); /* 繫結XY座標值-方法2 for (int k = 0; k < XLabels.Count; k++) { DataPoint newDP = new DataPoint(k, YValues[k]); newDP.AxisLabel = XLabels[k]; Chart1.Series[0].Points.Add(newDP); } */
2013年7月18日 星期四
ASP.NET 透過 Microsoft.Office.Interop.Excel 開啟 Excel 的權限設定
這幾天用 ASP.NET 透過 Microsoft.Office.Interop.Excel 開啟 Excel
一直遇到問題
所以在這邊稍微整理一下
1.設定元件服務 > Microsoft Excel Application

2.安全性 > 啟動和啟用權限
要加入IIS 帳號能夠本機啟動/遠端啟動/本機啟用/遠端啟用

3.安全性 > 存取權限
要加入IIS 帳號能夠本機存取

4.識別身分
要設定為互動式使用者

如果都不設定,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定2,會出「Microsoft Office Excel 無法存取檔案 'xxxxx.xls'。可能原因如下: ‧檔案的名稱或路徑不存在。 ‧這個檔案正被其他程式所使用中。 ‧您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同。」錯誤
只設定3,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定2和3,會出「Microsoft Office Excel 無法存取檔案 'xxxxx.xls'。可能原因如下: ‧檔案的名稱或路徑不存在。 ‧這個檔案正被其他程式所使用中。 ‧您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同。」錯誤
只設定2和4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定3和4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
P.S.如果是在Web Server上測試
上述Microsoft Office Excel 無法存取檔案... 錯誤可能會替換為:
「伺服器丟出一個例外。(發生例外狀況於HRESULT: 0x80010105(RPC_E_SERVERFAULT))」
IIS 帳號 :
IIS6 = Network Service
IIS7.5 = IIS APPPOOL\應用程式集區名稱
我的測試環境:
Windows7, IIS7.5, Office2007
參考資料:
1.職人大-[ASP.net/MSSQL] 讀寫Office Excel之前要做的相關設定
2.保哥-介紹 IIS 7.5 的應用程式集區與新增的「虛擬帳戶」特性
一直遇到問題
所以在這邊稍微整理一下
1.設定元件服務 > Microsoft Excel Application

2.安全性 > 啟動和啟用權限
要加入IIS 帳號能夠本機啟動/遠端啟動/本機啟用/遠端啟用

3.安全性 > 存取權限
要加入IIS 帳號能夠本機存取

4.識別身分
要設定為互動式使用者

如果都不設定,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定2,會出「Microsoft Office Excel 無法存取檔案 'xxxxx.xls'。可能原因如下: ‧檔案的名稱或路徑不存在。 ‧這個檔案正被其他程式所使用中。 ‧您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同。」錯誤
只設定3,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定2和3,會出「Microsoft Office Excel 無法存取檔案 'xxxxx.xls'。可能原因如下: ‧檔案的名稱或路徑不存在。 ‧這個檔案正被其他程式所使用中。 ‧您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同。」錯誤
只設定2和4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
只設定3和4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤
P.S.如果是在Web Server上測試
上述Microsoft Office Excel 無法存取檔案... 錯誤可能會替換為:
「伺服器丟出一個例外。(發生例外狀況於HRESULT: 0x80010105(RPC_E_SERVERFAULT))」
IIS 帳號 :
IIS6 = Network Service
IIS7.5 = IIS APPPOOL\應用程式集區名稱
我的測試環境:
Windows7, IIS7.5, Office2007
參考資料:
1.職人大-[ASP.net/MSSQL] 讀寫Office Excel之前要做的相關設定
2.保哥-介紹 IIS 7.5 的應用程式集區與新增的「虛擬帳戶」特性
2012年7月17日 星期二
ASP.NET 縮圖
記錄一下縮圖的語法:
使用者上傳檔案時,我會先將檔案rename為xxxxxx_temp.jpg
最後縮完圖後,再將新圖存成xxxxxx.jpg
順便再刪除中介圖片xxxxxx_temp.jpg
這個語法還有一個好處
就是最後完成的圖片會是 RGB 格式的圖片
即使原始圖片是 CMYK 格式也一樣 (不知不覺中就轉檔了)
參考自工頭大大的BLOG [軟體工頭的分享BLOG]
使用者上傳檔案時,我會先將檔案rename為xxxxxx_temp.jpg
最後縮完圖後,再將新圖存成xxxxxx.jpg
順便再刪除中介圖片xxxxxx_temp.jpg
Imports System.Drawing
Protected Sub ChangeSize(ByVal FilePath As String)
Dim imgSource As Image = Image.FromFile(FilePath)
Dim intFixLength As Integer = 750
Dim intChangedWidth As Integer = 0
Dim intChangedHeight As Integer = 0
' 設短邊為750px, 長邊等比例縮放
With imgSource
If .Width < .Height Then
intChangedWidth = intFixLength
intChangedHeight = .Height / .Width * intFixLength
Else
intChangedWidth = .Width / .Height * intFixLength
intChangedHeight = intFixLength
End If
End With
Dim bmpIntermediary As New Bitmap(intChangedWidth, intChangedHeight)
Dim gphPainter As Graphics = Graphics.FromImage(bmpIntermediary)
' 圖片繪製品質
gphPainter.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
' 圖片呈現品質
gphPainter.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
' 圖片插補模式
gphPainter.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear
' 1:要繪製的圖片 2:起始x座標 3:起始y座標 4:寬度 5:高度
gphPainter.DrawImage(imgSource, 0, 0, intChangedWidth, intChangedHeight)
bmpIntermediary.Save(Replace(FilePath, "_temp.jpg", ".jpg"), Imaging.ImageFormat.Jpeg)
bmpIntermediary.Dispose()
gphPainter.Dispose()
imgSource.Dispose()
Dim fiSource As New FileInfo(FilePath)
If fiSource.Exists Then
fiSource.Delete()
End If
End Sub
Protected Sub ChangeSize(ByVal FilePath As String)
Dim imgSource As Image = Image.FromFile(FilePath)
Dim intFixLength As Integer = 750
Dim intChangedWidth As Integer = 0
Dim intChangedHeight As Integer = 0
' 設短邊為750px, 長邊等比例縮放
With imgSource
If .Width < .Height Then
intChangedWidth = intFixLength
intChangedHeight = .Height / .Width * intFixLength
Else
intChangedWidth = .Width / .Height * intFixLength
intChangedHeight = intFixLength
End If
End With
Dim bmpIntermediary As New Bitmap(intChangedWidth, intChangedHeight)
Dim gphPainter As Graphics = Graphics.FromImage(bmpIntermediary)
' 圖片繪製品質
gphPainter.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
' 圖片呈現品質
gphPainter.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
' 圖片插補模式
gphPainter.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear
' 1:要繪製的圖片 2:起始x座標 3:起始y座標 4:寬度 5:高度
gphPainter.DrawImage(imgSource, 0, 0, intChangedWidth, intChangedHeight)
bmpIntermediary.Save(Replace(FilePath, "_temp.jpg", ".jpg"), Imaging.ImageFormat.Jpeg)
bmpIntermediary.Dispose()
gphPainter.Dispose()
imgSource.Dispose()
Dim fiSource As New FileInfo(FilePath)
If fiSource.Exists Then
fiSource.Delete()
End If
End Sub
這個語法還有一個好處
就是最後完成的圖片會是 RGB 格式的圖片
即使原始圖片是 CMYK 格式也一樣 (不知不覺中就轉檔了)
參考自工頭大大的BLOG [軟體工頭的分享BLOG]
2012年2月24日 星期五
從偽裝 Excel 到真正 Excel
最近在弄個匯出 Excel 功能
一開始產生 csv 格式, 逗號隔開欄位, 結果 User 反映中文變亂碼
改用 Encoding.UTF8 後, User 又反映日文還是亂碼
就改為產生 html 格式的檔案, 存檔時將副檔名命名為 .xls (偽)
User 終於什麼都 OK 了, 但我卻發現 Excel 2007 開啟時會跳出
「您正在嘗試開啟 'xxxxx.xls',其檔案格式與副檔名所指定的格式不同」訊息
(偽 Excel 被識破了~~)
在懶得再次大改程式的前提下
想到了個小修改解決這一切
就是用 Excel 2003 把偽 Excel 開啟
再另存為真正的 Excel
這個做法的缺點是: 必須在 Server 上儲存實際檔案, 且 Server 上要有 Excel 2003 元件
為什麼不一開始就用 Excel 元件來產生檔案 ?
因為 User 要求一堆有的沒的格式
對我來說, 用 html 格式設定比較容易
一開始產生 csv 格式, 逗號隔開欄位, 結果 User 反映中文變亂碼
改用 Encoding.UTF8 後, User 又反映日文還是亂碼
就改為產生 html 格式的檔案, 存檔時將副檔名命名為 .xls (偽)
User 終於什麼都 OK 了, 但我卻發現 Excel 2007 開啟時會跳出
「您正在嘗試開啟 'xxxxx.xls',其檔案格式與副檔名所指定的格式不同」訊息
(偽 Excel 被識破了~~)
在懶得再次大改程式的前提下
想到了個小修改解決這一切
就是用 Excel 2003 把偽 Excel 開啟
再另存為真正的 Excel
Private Sub SaveAsXls(ByVal xlsFileName As String)
Dim xlsApp As New Excel.Application
Dim xlsNewFileName As String = Replace(xlsFileName, ".xls", "_1.xls")
xlsApp.Workbooks.Open(xlsFileName)
xlsApp.Workbooks(1).SaveAs(xlsNewFileName , Excel.XlFileFormat.xlExcel9795)
xlsApp.Workbooks(1).Saved = True
xlsApp.Quit()
xlsApp = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
' 刪除偽 Excel (不隨手亂丟垃圾的好習慣)
Dim fiOriginFile As New FileInfo(xlsFileName)
If fiOriginFile.Exists Then
fiOriginFile.Delete()
End If
End Sub
Dim xlsApp As New Excel.Application
Dim xlsNewFileName As String = Replace(xlsFileName, ".xls", "_1.xls")
xlsApp.Workbooks.Open(xlsFileName)
xlsApp.Workbooks(1).SaveAs(xlsNewFileName , Excel.XlFileFormat.xlExcel9795)
xlsApp.Workbooks(1).Saved = True
xlsApp.Quit()
xlsApp = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
' 刪除偽 Excel (不隨手亂丟垃圾的好習慣)
Dim fiOriginFile As New FileInfo(xlsFileName)
If fiOriginFile.Exists Then
fiOriginFile.Delete()
End If
End Sub
這個做法的缺點是: 必須在 Server 上儲存實際檔案, 且 Server 上要有 Excel 2003 元件
為什麼不一開始就用 Excel 元件來產生檔案 ?
因為 User 要求一堆有的沒的格式
對我來說, 用 html 格式設定比較容易
2011年11月30日 星期三
設定 Oracle Client 的 NLS_LANG
前一陣子透過 Oracle Client 讀取 Oracle 資料
發現有些 View 的資料永遠讀不出來
最後發現是因為 Web Server 上 Oracle Client 的 NLS_LANG 設的和 Database 不一樣
只要加上下面這一行, 就一切 OK~
發現有些 View 的資料永遠讀不出來
最後發現是因為 Web Server 上 Oracle Client 的 NLS_LANG 設的和 Database 不一樣
只要加上下面這一行, 就一切 OK~
' AMERICAN_AMERICA.ZHT16BIG5 是我們 Database 上的設定
Environment.SetEnvironmentVariable("NLS_LANG", "AMERICAN_AMERICA.ZHT16BIG5")
Environment.SetEnvironmentVariable("NLS_LANG", "AMERICAN_AMERICA.ZHT16BIG5")
2010年8月24日 星期二
ASP.NET 以 Stream 方式下載 Excel
ASP.NET 轉存 Excel
可以先使用 Microsoft Office.Interop.Excel 元件產生並另存 Excel
再利用 Stream 方式將新建的 Excel 供使用者下載
下面是以 Stream 方式下載已存在的 Excel 的 Sample Code :
可以先使用 Microsoft Office.Interop.Excel 元件產生並另存 Excel
再利用 Stream 方式將新建的 Excel 供使用者下載
下面是以 Stream 方式下載已存在的 Excel 的 Sample Code :
protected void OutputExcel(Excel_RelPath)
{
string Excel_PhyPath = Server.MapPath(Excel_RelPath);
FileInfo fi = new FileInfo(Excel_PhyPath );
if (fi.Exists)
{
FileStream fs = new FileStream(ExcelName, FileMode.Open);
long FileSize = fs.Length;
// 將 Excel 內容以 Binary 方式存入 Buffer 變數
byte[] Buffer = new byte[(int)FileSize];
fs.Read(Buffer, 0, (int)FileSize);
fs.Close();
Response.AddHeader("Content-Disposition", "attachment;
filename=" + fi.Name);
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(Buffer);
Response.Flush();
}
}
{
string Excel_PhyPath = Server.MapPath(Excel_RelPath);
FileInfo fi = new FileInfo(Excel_PhyPath );
if (fi.Exists)
{
FileStream fs = new FileStream(ExcelName, FileMode.Open);
long FileSize = fs.Length;
// 將 Excel 內容以 Binary 方式存入 Buffer 變數
byte[] Buffer = new byte[(int)FileSize];
fs.Read(Buffer, 0, (int)FileSize);
fs.Close();
Response.AddHeader("Content-Disposition", "attachment;
filename=" + fi.Name);
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(Buffer);
Response.Flush();
}
}
2010年6月15日 星期二
HtmlEncode 及 HtmlDecode
因為資料庫編碼的關係
有時候需要將資料先編碼後再存入
而取出來時, 則需將資料再解碼
所以記錄一下 .NET 的 Server.HtmlEncode() 及 HtmlDecode() 作用
[應用]
1.因為 Outlook 的 Email Subject 不會像 Email Body 一樣
自動將編碼後的資料自動解碼為 Unicode 資料
所以如果將編碼後的資料丟給 Outlook Email Subject,
它就會原封不動的輸出, 以致於主旨會有 は 這種資料出現
2.Excel 也和 Outlook Email Subject 一樣
並不會自動解碼, 所以在丟給 Excel 之前
就要自行先將資料解碼
有時候需要將資料先編碼後再存入
而取出來時, 則需將資料再解碼
所以記錄一下 .NET 的 Server.HtmlEncode() 及 HtmlDecode() 作用
//寫入DB前,先將資料編碼
string A = Server.HtmlEncode("は");
//存入DB的資料為 'は'
string A = Server.HtmlEncode("は");
//存入DB的資料為 'は'
//讀出資料為'は',將資料解碼
string A = Server.HtmlDecode(dt.rows[0][0].toString());
//解碼後資料為'は'
string A = Server.HtmlDecode(dt.rows[0][0].toString());
//解碼後資料為'は'
[應用]
1.因為 Outlook 的 Email Subject 不會像 Email Body 一樣
自動將編碼後的資料自動解碼為 Unicode 資料
所以如果將編碼後的資料丟給 Outlook Email Subject,
它就會原封不動的輸出, 以致於主旨會有 は 這種資料出現
2.Excel 也和 Outlook Email Subject 一樣
並不會自動解碼, 所以在丟給 Excel 之前
就要自行先將資料解碼
2010年6月1日 星期二
ClientScriptManager.RegisterStartupScript 無效
今天在 ASP.Net 網站中寫一個共用程式(common.cs)
想供各頁面引用
結果寫一個簡單的 Javascript Alert() function 就一直死不出來
在這邊記錄一下正確寫法
之前是死在我自行宣告的 page 物件
因為 page 物件是我建構出來的
並不是呼叫頁面的 page
RegisterStartupScript 加入的是我自行宣告的 page 物件中
而非原呼叫頁面
所以原呼叫頁面完全沒有這段 script 內容
原錯誤程式如下:
想供各頁面引用
結果寫一個簡單的 Javascript Alert() function 就一直死不出來
在這邊記錄一下正確寫法
public void AlertMessage(System.Web.UI.Page page, string ScriptID, string Message)
{
ClientScriptManager cs = page.ClientScript;
if (!cs.IsStartupScriptRegistered(typeof(string), ScriptID))
{
string Script = "<script language=\"javascript\">";
Script += " alert(\"" + Message + "\");";
Script += "</script>"
sc.RegisterStartupScript(typeof(string), ScriptID, Script);
}
}
{
ClientScriptManager cs = page.ClientScript;
if (!cs.IsStartupScriptRegistered(typeof(string), ScriptID))
{
string Script = "<script language=\"javascript\">";
Script += " alert(\"" + Message + "\");";
Script += "</script>"
sc.RegisterStartupScript(typeof(string), ScriptID, Script);
}
}
之前是死在我自行宣告的 page 物件
因為 page 物件是我建構出來的
並不是呼叫頁面的 page
RegisterStartupScript 加入的是我自行宣告的 page 物件中
而非原呼叫頁面
所以原呼叫頁面完全沒有這段 script 內容
原錯誤程式如下:
public void AlertMessage(string ScriptID, string Message)
{
System.Web.UI.Page page = new System.Web.UI.Page();
ClientScriptManager cs = page.ClientScript;
if (!cs.IsStartupScriptRegistered(typeof(string), ScriptID))
{
string Script = "<script language=\"javascript\">";
Script += " alert(\"" + Message + "\");";
Script += "</script>"
sc.RegisterStartupScript(typeof(string), ScriptID, Script);
}
}
{
System.Web.UI.Page page = new System.Web.UI.Page();
ClientScriptManager cs = page.ClientScript;
if (!cs.IsStartupScriptRegistered(typeof(string), ScriptID))
{
string Script = "<script language=\"javascript\">";
Script += " alert(\"" + Message + "\");";
Script += "</script>"
sc.RegisterStartupScript(typeof(string), ScriptID, Script);
}
}
2009年9月4日 星期五
在ASP.NET中跳出訊息視窗
搭配Javascript就可以在ASP.NET中跳出訊息視窗
● 使用 RegisterStartupScript 會將內容的 Javascript 產生在 </form> 上一行
● 使用 RegisterClientScriptBlock 會將內容的 Javascript 產生在 <form> 下一行
<body>
<form name="form1" method="post" action="TestRegisterJava.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU5MTA2ODYwOWRkmbCuiO5HQUj5tuT4Q9q+cMWMGBo=" />
</div>
<script language="javascript">
alert("RegisterClient");
</script>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK90vPBCQLs0bLrBgKM54rGBjWLoYUoxEu/x64qISF1ZSWFz2B9" />
</div>
<div>
<input name="TextBox1" type="text" id="TextBox1" />
<input type="submit" name="Button1" value="Button" id="Button1" /><br />
<span id="Label1">Label</span></div>
<script language="javascript">
alert("RegisterStart");
</script>
</form>
</body>
protected void AlertMessage(string ScriptID, string Message)
{
string strScript = " <script language=\"javascript\">\n";
strScript += " alert(\"" + Message + "\");\n";
strScript += "</script>\n";
RegisterStartupScript(ScriptID, strScript);
}
{
string strScript = " <script language=\"javascript\">\n";
strScript += " alert(\"" + Message + "\");\n";
strScript += "</script>\n";
RegisterStartupScript(ScriptID, strScript);
}
● 使用 RegisterStartupScript 會將內容的 Javascript 產生在 </form> 上一行
● 使用 RegisterClientScriptBlock 會將內容的 Javascript 產生在 <form> 下一行
<body>
<form name="form1" method="post" action="TestRegisterJava.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU5MTA2ODYwOWRkmbCuiO5HQUj5tuT4Q9q+cMWMGBo=" />
</div>
<script language="javascript">
alert("RegisterClient");
</script>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK90vPBCQLs0bLrBgKM54rGBjWLoYUoxEu/x64qISF1ZSWFz2B9" />
</div>
<div>
<input name="TextBox1" type="text" id="TextBox1" />
<input type="submit" name="Button1" value="Button" id="Button1" /><br />
<span id="Label1">Label</span></div>
<script language="javascript">
alert("RegisterStart");
</script>
</form>
</body>
訂閱:
文章 (Atom)