Category Archives: ASP.Net Tips and Tricks

ASP.Net IIS Browser Image Cache Issue — 在ASP.Net 中解決Cache 了的圖片不能更新使用新的圖片問題

最近都是忙公司的網站…
為了提升使用者體驗
我們嘗試使用IIS 中的Caching,
希望使用者不同每次都需要Download 這網站的圖或CSS 檔…
這可以令瀏覽速度加快

之後我們也建立了一些Virtual Directory用來儲存一些每天都會更新的圖片… 其實是從Google Chartdownload 來的..因為公司的網站用了SSL …所以每當有需要連線到其他的domain website 時 在IE上總會出現一些令人煩惱的信息…
所以最後選擇了每天Download這些圖片…之後再用ASP.Net 來連接這想在Virtual Directory 上的圖…

誰不知… 這些圖片不懂得自動更新…即使檔案的修改日期已經更新了..但是在客戶端都只是看到之前的圖…
最後發現…原來這個Virtual Directory是繼承了這個Web ApplicationCache [content expiration] settings

解決方法很想十分簡單…
只要在這個”Virtual Directory/虛擬目錄” 上選擇”Properies/內容
之後選”HTTP Header’ 分頁
之後選”Enable content expiration”  ->選”Expire immediately“便可…

很可惜用戶已經瀏覽過公司的網站…
所以他們的瀏覽器上有了這個 Cache Expiration 設定…
瀏覽器只會在Cache 過期後才會再次Load 這個檔案的…
用戶可以按”CTRL” + “F5” 去解決這個問題…
但是如果需要找每一個用戶去做這個動作..給別人的感覺很不專業…

最後我們找到了解決的方法..
便是我們在圖片的URL 上加了一個用timestamp 做成的Query string
E.G.  http://i1255.photobucket.com/albums/hh631/sharechiwai/temporary-1.jpg?20101118000000

由於這個圖片的URL不同了..所以瀏覽器便會感到這是一個新的圖片檔案名…
便不會從Cache中 load 這個圖片出來了 =)

Hope you find it useful

.Net Library Export DataSet/DataTable to SpreadSheet (XLSX) II — 在 滙出 DataSet/DataTable 成 Excel XLSX 格式

最近…公司的新網頁需要一個功能..要輸出網頁上的一些資料成 Excel Spreadsheet..上星期測試了自己之前寫的 ShareChiWaiLib 的 XLSXHelper… 能夠成功在本機測試..可以打資料由DataSet/DataTable/GridView 上輸出到 XLSX… 很可惜真正的發報到 Server 時出現以下的  錯誤信息…
“Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). “

和朋友一起想了很久也想不通怎麼解決…
其中一個原因是不想在Server 上再安裝其他軟件..E.G. Office…最後終於放棄了 用XLSXHelper

經過一段時間的努力..終於學會怎樣使用 Open XML SDK 來做到把DataSet/DataTable Export 到 Spreadsheet [XLSX format 了]

我把Source Code 發佈了CodePlex 上.. 大家有興趣的請一起研究研究..令這個Library 更好用…方便其他遇到同樣問題的朋友
http://sharechiwailib.codeplex.com/

大家可以到以下URL Download 最近Compile 有OpenXMLXLSXHelper 的 DLL

http://sharechiwailib.codeplex.com/releases/view/55256

Imports ShareChiWaiLib
Dim tbl as DataTable = Get_DataTableForTesting() ' 這是你取DataTable的一個功能

Dim ds as DataSet = Get_DataSetForTesting() ' 這是你取DataSet的一個功能

Dim XLSXExporter As New OpenXMLXLSXHelper

XLSXExporter.ExportDatatableToXLSX(tbl, "D:DestinationFolder", "DataTable.xlsx", True, "ExampleSheet", 1)

XLSXExporter.ExportDataSetToXLSX(ds, "D:DestinationFolder", "DataSet.xlsx", True, 1)

解釋
XLSXExporter.ExportDatatableToXLSX(DataTable, 儲存位置, 儲存的, 是否使用Table Column Header 為Column 名, "Sheet Name", 第一行的Index 由1開始)

XLSXExporter.ExportDataSetToXLSX(DataSet, 儲存位置, 儲存的, 是否使用Table Header 為Column 名,  第一行的Index 由1開始)

Hope you find it useful
有時間的時候我會做一些範例來..令到這個Library 更加容易明白…更加容易使用
Have a good day =)

Asp.Net Unable to generate a temporary class(result=1)

今日早上收到朋友的Email 說 公司的一個將會發佈的網頁有問題
當瀏覽到其中一頁時遇到以下的Error Message

Unable to generate a temporary class(result=1)
error CS2001: Source file ‘C:WINDOWSTEMPxxxx.cs’ could not be found
error CS2008: No inputs specified

我記得很久之前也遇過差不多的問題

其實解決方法十分簡單
我們可以跟隨錯誤信息來分析這個問題
Unable to generate a temporary class

error CS2001: Source file ‘C:WINDOWSTEMPxxxx.cs’ could not be found
加在一起給我的感覺是
因而不能產生這個 temporary class
所以便找不到這個Source file

不能產生temporary class 其中一個原因是
因為在Server上沒有寫的權力…
所以我登入到這個Server
找到這個路徑
“C:WINDOWSTEMP”
更改了 這個IIS 的使用者權限
令他可以修改這個資料夾的權力
E.g.加入 Modify/Read/Write的權力
便可以解決這個問題了

Hope you find it useful

Call Javascript in ASP.Net UpdatePanel —在ASP.Net 的 UpdatePanel 中使用/呼叫Javascript

在之前的 網誌 ASP.Net Call Javascript Method to make you ASP.Net Application more efficient — 在ASP.Net 中使用/呼叫Javascript 令到你的ASP.Net 網站走快一點順一點

介紹了如何使用ASP.Net Code Behind 來使用/呼叫Javascript
令到你的ASP.Net 網站走快一點順一點
相信大家很多時候都會使用UpdatePanel ASP.Net Ajax 的技術
但當你的頁面上有UpdatePanel 時便可能用不著這些在之前的網誌所介紹的 Code了…
我研究了一段日子..
最後找到了解決方法 =)

就是使用ScriptManager.RegisterStartupScript 來代替 Page.ClientScript.RegisterStartupScript

VB.Net
ScriptManager.RegisterStartupScript(Me, Me.GetType, “ShareChiWaiJS”, “alert(‘Welcome to ShareChiWai’);”, True)

C#
ScriptManager.RegisterStartupScript(this, Page.GetType(), ShareChiWaiJS”, “alert(‘Welcome to ShareChiWai’); “, true);

解釋
ScriptManager.RegisterStartupScript(“頁Page”, “Type 都是頁”, “Key Name”, “你將會使用到的 Javascript;”, “加上Script Tag E.g. 自動加上 <script type=’text/javascript’> </script>”);

Hope you find it useful.

ASP.Net Call Javascript Method to make you ASP.Net Application more efficient — 在ASP.Net 中使 用/呼叫Javascript 令到你的ASP.Net 網站走快一點順一點

最近因為要幫朋友改善他的ASP.Net Project 所以記下了一些使用ASP.Net 的心得
希望可以增加User Experience
大家有時間可以參考一下…

如果大家覺得有用的話..請留言給我…
這會給我有更加多的動力去寫多一些想這像的網誌 =)
可以改善我寫網誌的技巧

在ASP.Net 提供了一個十分方便的開發環境給我們
其中ASP.Net 提供了ASP.Net Ajax Control ToolKits
令到我們可以不用寫任何的Javascript 便可以實現用Javascript 的效果

但是他們都是Server Side Control..
所以需要進行PostBack, 把資料/Request傳到Server
之後Server 再把網頁/部分網頁Render到我們的Browser 中
這或多或小都會令到 顯示網頁有小小的Delay的…
令到使用者體驗不太好

如果可以在ASP.Net 中使用一些Javascript 這便事半功倍了 =)
今天想會大家介紹如何在ASP.Net 中 使用Javascript

在ASP.Net 中我們不可像在Windows Application 一樣
使用MessageBox.Show 來顯然 信息

但是我們可以運用ASP.Net Code Behind 來使用/呼叫Javascript功能
在沒有Update Panel 的情況下我們可以使用以下的程式碼實行 在ASP.Net call Javascript method

VB.Net
Page.ClientScript.RegisterStartupScript(Me.GetType, “ShareChiWaiJS”, “alert(‘Welcome to ShareChiWai’);”, True)

C#
Page.ClientScript.RegisterStartupScript(this.GetType(), “ShareChiWaiJS”, “alert(‘Welcome to ShareChiWai’); “, true);

解釋
Page.ClientScript.RegisterStartupScript(“這個類 System.Tye”, “Key Name”, “你將會使用到的 Javascript;”, “加上Script Tag E.g. 自動加上 <script type=’text/javascript’> </script>”)

現在相信大家都可以在ASP.Net 中使用/呼叫Javascript
Hope you find it useful

待續… 下集
Call Javascript in ASP.Net UpdatePanel —在ASP.Net 的 UpdatePanel 中使用/呼叫Javascript

How to improve ASP.NET Website performance Tips and Tricks — 如何令你的ASP.NET Website運作得更有效率/走得更快

最近在工作上被人分派了去幫朋友手, 去提升公司其中一個ASP.NET Web Project 的效能…
因為這個 Web Portal 比起之前的VERSION 會有更多功能會更好的使用者體驗
將會在大概一個月後會發報出來給客戶使用…希望藉些可以吸引更多新客戶/或減小客戶流失…
但現在還有一些 效能/速度問題/和使用者體驗方面 需要下一些功夫…
你可以想像一下, 即使一個網站有多美…有多功能…
但速度/User Experience反應…就會令個Web Site 失分..

所以我希望在將來的日子和大家分享一些我在ASP.NET Developement 的經驗
一些小Tips 這可能會令到你的asp.net 網頁效能更好

以下是小小的 tips, 當我有時間的時候會寫多一些文章加以解釋
怎樣實踐和為什麼這想做會快一點等等

令到一個ASP.NET Website 慢的原因有很多 [其實 PHP/JSP/其他的 Web 技術]

1) 使用AJAX
如果情況可以的話 用多一些AJAX 的技術..可以減小 全頁更新所需要的的 時間

2) 設定 EnableViewState=”False”
在ASP.NET 如果你在 BROWSER 上看看 網頁的原始碼
你會看到很多字串像

&lt;input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
         value="/wEPDwUKMjA0NzE2Mzc0MmRkl+AVk6NWOQ5A8i+R2UgeVfq0XMY=" /&gt;

其實他是ASP.NET 產生出來的 用來記著 網頁的狀態, 很多的 ASP.NET 控制都會產生 ViewState 的
如果在 ASP.NET Control 上 設定 EnableViewState=”False” 便可以減小 這是不知名字串的產生了
亦都可以加快 頁面 Loading 的速度… 因為 原始檔會細一點

3) 使用Paging
當在當面上要顯示資料的話, 如果你把這個資料做分頁, 這便可以更加,頁面顯示的Loading 速度

4) 設定 Caching
可以減小 IIS server 的負荷, 可以在一次 不會變的

5) 優化SQL Query
如果你的ASP.NET 網面有用到資料庫的話…
如果能夠好好 優化SQL的查詢, 網面的 等候時間也會減小

以上是小弟的 概念…如果有什麼說得不對..請大家留言更正我的錯誤觀念

Hope you find it useful

待續…

ASP.Net — Named Pipes Provider: Could not open a connection to SQL Server [2]

這個週末..公司又升級資料庫, 由Microsoft SQL 2000 升級到 Microsoft SQL 2008
之後公司有位朋友Email 我叫我幫忙測試一下升級後的公司的網站有沒有什麼功能壞了

當我用Visual Studio 進行Debug
發現有一個功能是用要執行 一個Stored Procedure
而這條Stored Procedure 是會用到Linked ServerView 的複雜Query
出現問題..

由於這個功能在SQL2000 時使用時沒有問題的
所以想信不是程式上的錯誤…
而是SQL Server或一些設定的錯誤
Named Pipes Provider: Could not open a connection to SQL Server [2]

但是從SQL Server Management Studio 執行這個 Stored Procedure 是沒有問題的…
真是一個挑戰…

由於自己沒有權限可以用sa 來嘗試從新設定這個Server 所以為有慢慢想想有什麼地方有機會有問題…
到最後發現..這有可能是View… 因為之前嘗試過, 原本的Table加多了行或改了Column 久後
View 不能自動更新到最新的Table Defination
所以我便嘗試 重新建立這個View

結果..真的是解決了這個問題

Hope you find it useful