2008年6月18日 星期三

Silverlight初探(6.17)

Silverlight 是微軟針對下一代Web所推出的新技術,本身具備了「向量動畫」、「2D繪圖」、「影音播放」,達到更好的視覺化效果與互動性。

架構特點

  1. 輕量級的瀏覽器plug-in:安裝元件的大小只有1.4MB。
  2. XAML為基礎,能夠產生向量文字、2D繪圖、影音播放。
  3. 與既有技術的整合:可與既有的HTML、DOM、CSS、AJAX技術搭配運用。

跨平台與跨瀏覽器能力

詳細對應表:資料來源

OS/瀏覽器

IE 7

IE 6

Firefox 1.5

Firefox 2

Safari

Windows Vista

Yes

-

Yes

Yes

-

Windows XP

Yes

Yes

Yes

Yes

-

Windwos 2000

-

Yes**

No

No

-

Windos Server 2003

Yes

Yes

Yes

Yes

-

Mac OS (PowerPC)

-

-

Yes*

Yes*

Yes*

Mac OS (Intelbased)

-

-

Yes

Yes

Yes

附註:上表中「*」表示只支援「Silverlight 1.0 」;「**」表示只支援「Silverlight 2」。資料日期:2008/6/17

問:有否支援「Linux」?

答:目前微軟官方並無打算推出Linux版的安裝程式,但民間已經人開始製作支援的程式。

開發環境

  1. 開發Silverlight 程式最基本只需安裝Silverlight Runtime Component軟體,隨後用記事本(Notepad)開發。
  2. 若希望在VS2005開發,請先安裝VS 2005 SP1 修補後,再安裝 Silverlight 1.0 SDK 。透過工具,產生 Silverlight 專案樣板。
  3. 而在ASP.NET AJAX 專案中,只需將 Silverlight 的 Silverlight.js 及相關的 JavaScript 檔引用即可。
  4. 如欲在VS2008開發,請下載安裝Silverlight Tools ,及Silverlight 2 SDK ,即可開啟樣板使用。
  5. 使用Microsoft® Expression Blend 開發,以所視即所得之圖形化界面。官方網頁(微軟)

最佳應用場景

  1. 網頁媒體領域,如:商業影片、動畫廣告…等。
  2. 網頁小程式,如:網頁遊戲…等。
  3. 網頁視覺化資料與圖形分析,如:財務圖形、地圖…等。

參考範例

  1. 線上鋼琴
  2. 華航精緻旅遊
  3. 微軟Silverlight

開發示範

1.建立新專案「Silverlight」(VS2005)
2.可以看到,程式自動幫你產生好了相關的檔案
3.程式也自動幫你做好了個簡單的按鈕範例
4.另外,可以發現,Silverlight的網頁按了右鍵後,是會顯示組態的檔案(相關資訊)

2008年6月14日 星期六

不使用 SqlDataSource 的 GridView 排序(6.14)

排序是個很簡單的東西嘛 ~ 常常在使用 GridView 的人都知道,
不就是把「AllowSorting」的屬性設成「True」,
以及將對應的欄位「SortExpression」屬性,設為該欄位名稱

沒錯!若是使用 SqlDataSource 的話,的確這樣就可以輕易達到排序的功能。
但,如果您的資料來源(DataSource),不是指定「DataSourceID ="某SqlDataSource 控制項"」
而是使用資料表(DataTable、DataView)來當資料來源的話

若單純如此設定,可是會踢到鐵板的喲~~




必須還要另外引發一個事件 Sorting



程式碼檢視

2008年6月12日 星期四

快速的檢查所有的欄位 (6.12)

不知各位有否曾經何時寫過類似如此的判斷句:


if ( TextBox1.Text != "" && TextBox2.Text != "" && ...)

我想,這是一般在檢查必填欄位時,會用到的判斷語句吧~


我們來假設一下,
若現在這個網頁有30個 TextBox 的控制項,且,希望全部都是必填欄位
又或是,由於目前 SQL Injection 與 XSS 的盛行,想要對每個欄位進行檢查過濾字元
如果是採用原先的寫法,這樣,可能會寫的很累。


或許,您可改寫成這種方式會讓您省事許多:



可利用「Panel」將全部的元件包起來,並以迴圈的方式檢查 Panel 裡所有的TextBox

當 .Net AJAX 遇上 Frame (6.12)

適用了 .Net 包裝的 AJAX 一些時間後,發現,真的是「水能載舟,亦能覆舟」。

在使用前,只知道 AJAX 的優點,衝著它的優點去使用它,
卻沒想到,它也是個會另人頭痛的東西呀~~


目前有個專案,由於必須即時更新資料,所以,想到用使用 AJAX 套件的 UpdatePanel ,
讓它局部更新就好,畫面就不會一直閃。有了這個前題,開始著手製作這簡單的功能。


沒錯,它的確很簡單,所以三兩下就可以完成,且也在本機測試正常,可以即時更新資料;
但是,當我把它放上「測試區環境」時,居然發現,只要滑鼠點了一下(不管左鍵,右鍵),
馬上跳出個 「JavaScript」的錯誤,錯誤上顯示著「存取失敗」

天吶 ~ 發生了什麼事,且是莫名奇妙的發生,對我這 AJAX 的初學者來說,可是個大問題。
明明在本機端不是正常嗎?怎麼到了測試區就壞了?

既然本機正常,測試區故障,那就即有可能是環境的問題。立即檢視了一下環境,
並且馬上再上 Google 尋找問題點,及解決方案,後來,總算是發現問題了。

看來這問題,並不是只有出現在我身上,已有許多前輩遇到,並也提出了解決方案。
真的太好了!現在,就來看看發生了什麼問題吧~

原來問題是出在「Frame」呀~若只是一般的框架,就還沒事,但若是遇到框架內,
左右(或是上下什麼的)網頁的來源路徑處於不同的主機時,
很抱歉,JavaScript 會出來跟您 聊個天,告訴您「存取失敗」。


那這是什麼原因呢?為什麼不同主機時,就會壞掉。經過網路前輩的分享,
得知原來問題就出在 .Net AJAX 的套件中,有個 MicrosoftAjax.debug.js 檔案,

裡面有部份語法是這樣寫的:

var offsetL = w.screenLeft - top.screenLeft - top.document.documentElement.scrollLeft + 2 ;

如果 Frame 的網頁路徑在不同主機上,使用了「top」當然會有問題(算是Bug吧),
但由於,這些程式,已經由 .Net 包起來了,無法直接去修改,
所以,我們便必須另外下載「Microsoft AJAX Library 」來用。

解壓縮後,將其,放在您的「虛擬目錄」底下,接著,
修改一下 ScriptManager 的內容:





再來,修改程式「MicrosoftAjax.debug.js 」中


case Sys.Browser.InternetExplorer: 到 case Sys.Browser.Safari:


修改成:





之後呢? ScriptManager 就會依照您給的路徑去執行該修改過的檔案。


參考來源:黑暗執行緒