2008/06/13

[Asp.Net]解決在aspx檔中使用Response.Write輸出script的"常數中包含新行字元"錯誤

在aspx中加入如下的程式將造成執行期出現錯誤 (編譯器錯誤訊息: CS1010: 常數中包含新行字元):
Response.Write("<script type=\"text/javascript\">window.open('./CSV/"
+ strFileCSVName + "','_blank');</script>;");
查了一些網路討論, 發現問題出在</script>標籤.
只要修改成以下的程式, 就可以順利通過執行期的編譯.
Response.Write("<script type=\"text/javascript\">window.open('./CSV/"
 + strFileCSVName + "','_blank');<" + "/script" + ">");
重點在於將拆開, 使其不在同一個字串中.

2008/06/11

[ASP.Net]使用System.Web.Caching做網頁資料的Cache

因為Asp.Net中常被使用的 <sqldatasource>, 並無 Exception Handle 的機制.
所以就算用了 <sqldatasource> 的 Caching, 可能還是有某種程度的風險.
例如: 在 Caching 時間到的時候, 剛好資料庫無法連線.
概念上簡單地說, 就是當 Caching 出錯時, 能保留上一次所儲存的資料, 以讓網頁正常運作.

[ASP.Net]透過WebRequest抓取網路上的圖檔

以下程式是透過 WebRequest 的方式將網路中的圖檔存到本機:

string Url = "http://l.yimg.com/tw.yimg.com/i/tw/hp/spirit/yahoo_logo.gif";
string FullFileName = @"c:\tmp\yahoo_logo.gif";
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(Url);
//預設TimeOut是30秒
webReq.Timeout = 30000;
HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
//檢查儲存的檔案路徑,其目錄是否存在
if (!Directory.Exists(Path.GetDirectoryName(FullFileName)))
{
    //建立目錄
    Directory.CreateDirectory(Path.GetDirectoryName(FullFileName));
}
using (BinaryReader imgStream = new BinaryReader(webResp.GetResponseStream()))
{
    File.WriteAllBytes(FullFileName, imgStream.ReadBytes((int)webResp.ContentLength));
}