希格工作室

2011年8月16日 星期二

令人不解的VS2008 AJAX and AJAXToolkit with TabContainer

至今為止仍停留在ASP.NET的基礎的我,
對於什麼MVC、WPF、WCF...之類的雖然多少知道一些,但總覺得沒什實感。

AJAX也是。

相信有碰過AJAX的都不陌生,不過對我很陌生,雖然我知道它在做什麼的,但是工作上沒用到,所以也不曾理會過(真不稱職)。

現在才去試著去瞭解它在VS上的開發,因此我很開心的打開VS2008,選了AJAX範本



然後你會發現它預設帶了這個東西


<asp:ScriptManager ID="ScriptManager1" runat="server" />
微軟的解釋是:控制項可管理具有 AJAX 功能的 ASP.NET 網頁所適用的用戶端指令碼。依預設,ScriptManager 控制項會透過網頁對 Microsoft AJAX Library 註冊指令碼。這可讓用戶端指令碼使用類型系統延伸模組,以及支援部分頁面呈現與 Web 服務呼叫等功能。
http://msdn.microsoft.com/zh-tw/library/cc295440(v=Expression.40).aspx
總之就是要有它才會動就對了。

接著我想做類似這種東西的功能










http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/tabs/tabs.aspx

但是VS2008內建卻沒有?









GOD!只有這5個你也敢出來混。

原來還得自己去上面的網址抓套件.......

當我抓好並增加到我的組件後,多了非常多的套件,真是非常之感動。

結果當我簡單打好了基本的標籤語法後(我習慣都用打的)


<asp:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="1">
            <asp:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel1">
            <HeaderTemplate>123</HeaderTemplate>
            <ContentTemplate>456</ContentTemplate>
            </asp:TabPanel>
            <asp:TabPanel ID="TabPanel2" runat="server" HeaderText="TabPanel2">
                <HeaderTemplate>234</HeaderTemplate>
            <ContentTemplate>678</ContentTemplate>
            </asp:TabPanel>
        </asp:TabContainer>

依2008的運行方式來想,這種東西應該是不需要額外再去Bind它,所以我就很自然的Run下去

疑?

空白的?

WTF?

我做Ajax上傳時也不會這樣啊
https://sites.google.com/site/siggblog/sample/shangchuanjizidongfasongmail

當我右鍵下去發現資料都是存在的,但是style都是hidden,我還很天真的寫了script去指定它顯示.....結果不行。

於是我就TabContainer1.Visable=true;TabContainer1.DataBind();之類的蠢事。
結果當然也是不行。

於是我開始Google,但是完全沒有人有這種問題,而且每個人都是直接向我這樣打就能Run了,我說....是七月到了我見鬼嗎?難到就真這麼神奇?

於是我花了兩個小時在幹這鬼打牆的事,由於我個人認為這應該是件滿蠢的事,所以我也不打算問人(上網問)。

最後我終於GOO到了一個BLOG
http://www.zhangyongjun.com/BLOG/article.asp?id=6618

我原本以為這份文件對我沒什麼用處,就草草看完然後繼續找,但是我越找越覺得哪怪怪的,於是我又回頭重看一次,看到了一個重點。

如下圖

ToolkitScriptManager
怎麼有種即視感?

想到沒?

這跟我一開始建好的PAGE裡的<asp:ScriptManager ID="ScriptManager1" runat="server" />不是很像嗎?

於是我先不管它這麼多,照著網頁上的做,我拉了一個ToolkitScriptManager出來
結果發生了

只能在此頁面加入一個 ScriptManager 的執行個體。

的錯誤。

故得知ScriptManager一個頁面應該只能擁有一個,而且ToolkitScriptManager和ScriptManager是相同的東西。

於是我試著把ScriptManager給砍了,只留ToolkitScriptManager再試行一次。






喔喔喔喔!

喔喔喔喔!!


喔喔喔喔!!!


見證奇蹟的時刻到了。





果然是件很蠢的事情啊!



簡而言之

用AjaxControlToolkit就要用ToolkitScriptManager,至於ScriptManager是沒辦法使用的。

這叫人情何以堪

學我最近去上課的老師常說的一句話

這個時後我只有一個字可以形容:氣!