廉價日系航空 樂桃(PEACH)

出國經驗少得可憐的我,也沒什麼好比較的,硬要把國內坐小飛機的次數拿進來充數應該也是笑死人XD

不過就這次搭乘經驗,除了座位稍小,喝水需額外付費,其實台北─大阪這種短程飛行是很推薦搭廉價航空省錢的,也難怪同機的某家族連六七十長輩都招招一起去日本,不過聽到他們也是要夜宿機場倒是讓我蠻驚訝的就是~原來長輩也走背包客 窮酸 路線ˋ(′~‵")ˊ

除了硬體,樂桃的服務態度是很好的,無論是機上的空姐(蠻正的耶~是因為搭到首航第二班嗎XD),還是協助自助登機的地勤人員,跟一般航空公司無異。

暫時還是長榮櫃~

這是盡量避開人頭照的機場內景
不是禮拜三一大早出發嗎?為什麼人多成這樣@_@

外國人入境表有中文版,好方便呀~


然後我要說的是。。。最後一天,機場其實蠻好睡的,乾淨明亮的關西機場晚上都有保全(警察?)巡邏,讓人睡得很安心,睡飽之後走幾步路就可以辦理登機 哈哈

通道處可能晚上節約吧,比較暗~但不礙事,重點是可以睡的機場內部很明亮


超讚的關西機場,還有插座跟wifi捏


關西機場不只讓你睡,廁所又有日本必備的免治馬桶XD  只能說這次當背包客真的不狼狽
另外,這邊除了便利商店還有24hr的餐廳,平價的すき家再次拯救又餓又冷的我們(關西機場不冷,是我自己10月底還只帶夏裝T_T)

遠離繁華的京阪後,還能吃到溫暖的食物,實在感人 #(┬_┬)#


How to select dropdown list item by text

在網頁上實作""修改現有資料""時,一般要讓Dropdownlist選中本來的值,大多有以下二種作法
1. 在後端組資料時就賦予哪一個是Selected="true"
2. 用jQuery讓符合指定value的選項被選中
    寫法為 $("#Dropdownlist的ID").val("指定的值");

在Telerik Grid中也是採用第二種作法
function Grid_onEdit(e) {
    var dataItem = e.dataItem;
    var mode = e.mode;
    var form = e.form;
    var priceTextBox = $(form).find("#Price");

    var customerDropDownList = $(form).find("#Customer");
    if (mode == "edit") {
        //Select the proper dropdown list item
        customerDropDownList.val(dataItem.CustomerID);
    }
}

但是,當Dropdownlist的Text和Value不同時,
customerDropDownList.val(dataItem.CustomerID); 寫法是無效且不合理的
因為dataItem.CustomerID取回的是Dropdownlist的Text,但jQuery的val是用來比對Value

解決的寫法如下
$("select option:contains(" + dataItem.CustomerID+ ")").attr('selected', true); 

TFS2010作Code UI Test適用的瀏覽器


用TFS2010作Code UI Test,成功錄製的Web操作無法通過測試,本來以為是Assert不OK,後來改用IE就可通過測試,看來TFS2010對Firefox的支援還是不夠,上次上課聽胡百敬老師說,2012已改善此問題,可以使用非IE的瀏覽器作錄製。

用IE錄的時候,瀏覽器右上方會有Currently Recording的image顯示,Firefox就完全沒有了


解決IE 7無法動態append


IE 7下使用append或appendTo動態加入html element無效
google了很久發現大多數@解決辦法都是建議要有完整的結束標記,例如< div>開頭就要有< /div>結尾,即可避免append失敗的狀況。
但是,我實際在IE 9的F12開發者工具以IE 7模式測試還是沒反應,網頁也沒報錯。
後來才想到可能是DOM文件的不合理,因為我把div、input一堆有的沒的直接塞在table裡面,而不是塞tr、td這類的給table,
後來乖乖組合成合理的文件結構就好了

綜合以上,append的效果在Firefox、IE 8、IE 9都正常,在懷疑IE 7很爛前請先確認自己的Html合理 XD

Capsule Ryokan Kyoto

搶搭PEACH(樂桃)首度在台開賣的促銷活動,交通搞定再來就是住宿,這次很幸運地入住網路上文章不多,但品質很不賴的京都膠囊旅館Capsule Ryokan Kyoto

要先稱讚的是快速回覆email的效率,當時是晚上八九點發出Tour Club Kyoto的住宿需求,馬上得到沒有空房,但是建議我選擇他們在2010新開的Capsule Ryokan Kyoto,一切快速又資訊充分,本人在訂到PEACH後沒幾個小時,就完成訂房手續!
且Capsule Ryokan Kyoto很尊重顧客,完全不要求預付訂金,細節確定後就替旅人保留房間,這邊要提醒大家,千萬不要當失格的旅人啊~真沒辦法如期入住,也要回覆個email讓對方好做生意捏!

說是膠囊旅館但也有提供套房型的住宿,膠囊型滿足想省摳摳的背包客,擁有獨立衛浴的套房則適合自助又想住的更舒服一點的旅客嚕!

Capsule Ryokan Kyoto的地理位置很不賴(過個馬路就到西本願寺!!),加上日本街道乾淨平整,拖著行李走到步行距離7分鐘的旅館並不難,且店家附上的超詳細地圖,連第幾個紅綠燈要轉彎,沿路有哪些地標都清清楚楚,就算不懂日文&英文爛得要死都能靠自己走到啊!!!

白天的Capsule Ryokan Kyoto
老實說,第一天運氣不頂好~遇上超大雨@@  這是離開時補拍的XD


雖然對面一排居酒屋,但晚上治安也很好,透著昏黃燈光的旅館,再晚回去都令人安心


這是從check in櫃台看進去的交誼廳一角,沒有音響、電視或桌遊,簡單乾淨的客廳+廚房以及2台公用電腦,讓各國旅客泡杯咖啡放鬆談天,也能即時查詢旅遊情報,是個雖小卻什麼都有的舒適空間


可簡單泡杯茶或咖啡的小小廚房


不知道是不是我大驚小怪,公用電腦有繁體中文好貼心喔>////////<


公用設備介紹完,要來介紹一下這三天住宿遇到的旅館管理人,第一天遇到的Tadashi先生是個很活潑的人,話不停一下跟我介紹客廳的書法,一下問我打哪來,熱情又不過份的接待,讓初到貴寶地的我很放心。
第二天與最後一天check out遇到的Ayaka小姐就跟我比較無緣,除了出門前的點頭示意與最後一天的掰掰,其實沒有交集,但也是位可愛又有禮貌的管理人。
第三天的Toshi先生是個年輕小夥子(?),我覺得好像Arashi的二宮和也!笑起來靦腆的Toshi話不多,即使都快過試穿和服的時間,還是很熱情地幫忙試穿拍照,最後還巧遇可愛的老闆,拿出古錐的木屐讓我搭配,不然慢跑鞋搭和服好鳥XD


選擇套房除了空間寬裕點,還能感受一下睡榻榻米,雖然京都寸土寸金,但小小卻剛好合用的榻榻米之下,一掀開可是放的下二個大行李箱呢


再來是雖然小但不得不佩服日本人的衛浴&廁所


讓我一用就愛上的免治馬桶,真的如Tadashi先生說的   這是high tech啊╮(′~‵")╭ 


最後就是,像我這種省省自助人會關心的價錢啦!
一晚7,980 yen,住三天沒特別符合什麼優惠方案,這次旅程下來二人套房總共花了23,940 yen(三晚)嚕



★Capsule Ryokan Kyoto
addr:京都府下京区 土橋町204
phone:080-3113-6960
website:http://www.capsule-ryokan-kyoto.com/

IE傳遞帶有中文的url會有亂碼


傳遞中文其實不常遇到,但這次的UI呈現上比較複雜,中文傳遞不可避免,
而且傳遞不是單單呈現在UI,而是做為某個複合key值的一部分,會出現在URL~
只好使用下列程式碼解決
var url = "有好幾個中文字的網址";
var sUrl = encodeURI(url);
實際轉址請用sUrl就不會有問題

以上問題,只有在IE會出現,Firefox和Chrome都不需要做額外處理!

和妳的小旅行

2011比較有旅行運,在台灣跑來跑去,加上去年轉換跑道,是工作和生活都很精采的一年。

翻了翻2012照片,今年首次旅行獻給了你,獨立自主總是活得很精采的妳   RENEE

跑到另一國度探險,我絕對相信妳的新生活精采程度不減,
現在要回想我倆去了那些印象深刻的景點,倒是有點鈍鈍的,但我會記得一起去放鬆沒事講些五四三那種輕鬆的氛圍,期待下次見面聽妳分享我無法去感受的德國小日子。

附上2012夏初與妳的東部小旅行照片

第一天獨自搭車至池上跟妳會合


很幸運地   島上專屬我們



我們是幼稚鬼  一束捧花可以玩很久


遠在西方的妳有沒有流口水啊 哈

我差點有朋友是山寨夫人XD

本人搏命演出  但有人沒按錄影有人沒按錄影有人沒按錄影T__T

回程了    連騎車都是種享受


友情也要繼續甜滋滋啦0.<

C#自動實作屬性


在 C# 3.0版本開始提供超好用的自動實作屬性,以前宣告private變數的方式都免了~落落長的寫法丟光光,
只要{get; set;}一行,編譯器就會幫我們用private匿名支援欄位做掉!
如何一行搞定~請參考自動實作的屬性

但是但是...千萬要小心,不要{get; set;}用很爽~結果外部的程式竟然能修改你的物件就糟糕了
所以請參考使用自動實作的屬性來實作輕量型類別

以上記錄一下,以後方便自己翻閱

Left Join in LINQ

在SQL使用Join可大致分為Inner Join、Outer Join,其中Outer包含Left、Right、Full有的沒的。
今天記錄一下在LINQ(搭配C#)中如何做到Left Join的效果~

假設有2個table"Customer"&"Product"分別記錄顧客與產品資訊,假設這2個table可透過Name、Address欄位串接,最常用的Inner Join寫法如下:
//JOIN 1(Inner):如果customer沒有joinproduct就不保留
var result = customer.Join(product, c => new { c.Name, c.Address }, p => new { p.Name, p.Address }, (c, p) => new { c, p }).ToList();
產出的結果是擁有Product的Customer才會被保留,比如說王小明留下了客戶資料卻沒有訂購任何產品,那麼Join出來的new table是不會有王小明的資訊。

如果要以Customer為基準,無論有無訂購產品皆保留顧客資訊,那麼就要以Customer為Left Table作Left Join,寫法如下:
//JOIN 2(Outer-Left Join):即使customer沒有對應的product,也保留
var result = (from c in customer
join p in product
on new { c.Name, c.Address } equals new { p.Name, p.Address } into newProduct
from newP in newProduct.DefaultIfEmpty()
select new { c, newP }).Distinct();

Enumerable.GroupBy

最近要針對某複雜資料結構做分群,問題是資料又來自不同的資料供應者,只好先把資料兜成自定義class再使用Enumerable.GroupBy

MSDN的範例較簡單,key用int,被group的資料則是string

若是自定義class可參考stackoverflow Matt Smith建議的寫法,引述寫法如下:
List<smth> list = new List<smth>();
IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.id);
IEnumerable<smth> smths = groups.SelectMany(group => group);
List<smth> newList = smths.ToList();

又key不用侷限於int,個人試過用資料中的多組欄位組成unique string來分群組亦可!

Telerik Grid Custom Binding by TelerikMvcGridCustomBindingHelper


Telerik Grid可設置.Sortable()、.Pageable()、.Groupable()、.Filterable()達到排序、分頁、分群、過濾資料的效果,但這是使用Telerik所提供的binding為前提。

若採用CustomBinding,以上效果(排序、分頁、分群、過濾)全部都要自行實作,實作方式請參考官網CustomBinding,或是直接下載官方論壇提供的範例


依官方解法,每次CustomBinding都要針對Binding的資料結構各實作paging、sorting、grouping一次,尤其grouping更要事先設計好針對那些欄位是可以排序的。
若覺得官方解法太麻煩~~是真的很麻煩ε(┬┬_┬┬)3 ,或是資料結構過於複雜無法呈現,或你跟我一樣懶惰XDD
建議可搭配另一套件TelerikMvcGridCustomBindingHelper,達到更彈性、修改更少的寫法!

承接前篇文章Telerik Grid Custom Binding,BL與View都不用做任何改變,針對Controller所需異動描述如下

1. 至CodePlex下載TelerikMvcGridCustomBindingHelper套件
解壓或用NuGet安裝裡面二支library
download:http://tgh.codeplex.com/
library:TelerikMvcGridCustomBindingHelper.dll、TelerikMvcGridCustomBindingHelper.NHibernate.dll
version:1.10.15.247
notice:Telerik要記得更新到2012 Q2

2. 加入AutoMapper參考
download link:使用NuGet下指令安裝,指令為PM> Install-Package AutoMapper 
version:2.1.267.0

3. 把Helper要用到的另二種library下載回來參考
download:http://nhforge.org/Default.aspx
library:NHibernate.dll、Iesi.Collections.dll
version:3.3.1.4000

4. 修改Controller寫法
[GridAction(EnableCustomBinding = true)]
public ActionResult ListPO_CustomBinding(GridCommand command)
{
int totalCount = POService.QueryPOListIndex(command);
ViewBag.POTotalCount = totalCount;
List<PO> data = POService.QueryPOList(command);

//使用TelerikMvcGridCustomBindingHelper
for (int i = 0; i < (command.Page - 1) * command.PageSize; i++)
{
PO dd = new PO();
data.Insert(0, dd);
}
IQueryable<PO>
query = data.AsQueryable();
var gridHelper = new GridCustomBindingHelper<PO, PO>(command, query);
var gridModel = gridHelper.BuildGridModel();
gridModel.Total = ViewBag.POTotalCount;
return View(gridModel);

}


仔細比較與前篇寫法的差異處(黃色highlight),只要修改Controller一點點就省去實作N遍的paging、sorting、grouping
真是太感謝TelerikMvcGridCustomBindingHelper的開發團隊╭ (′▽`)╭(′▽`)╭(′▽`)╯

P&P義法創意廚房

這年頭一堆簡餐店普普通通也要收我二三百塊,尤其義大利麵更是飆到三百多要四百。

不過超平價義大利麵─艾隆、Mint就另當別論,這二家都是走好吃又吃得飽,但不還算是中階的精緻餐廳。
P&P義法創意廚房算是用餐環境不錯,料理品質有一定水準的餐廳,重點是他不貴!!加了10趴服務費也可以壓在300大洋以內,揪感心ㄟ

當然,愛吃美食的人也可以加點套餐~
P&P的套餐不馬虎,這次+99的四選三,三樣都頗滿意說


當天例湯是番茄牛肉清湯,不吃牛的朋友可在加點套餐前先詢問當日供應為何。
湯不錯喝,還能吃到二小塊牛腩,可惜有點小碗XDD


手工麵包附鮪魚沾醬,鮪魚很香沒腥味,也沒有打得過細~有吃的到鮪魚肉的口感


冰咖啡雖不能續杯,但飲料容量誠意十足,不怕一口喝掉就沒有XD

甜點選擇頗多,為了避開其他友人選的起司蛋糕,原以為是最普通的一款,沒想到美味之餘,蛋糕上層的特殊餅皮(?)還蠻特別的,冰冰的起司蛋糕沾點微酸的果醬真不錯吃!


義大利麵的部分擺盤、口味都不錯,不過友人說份量的拿捏似乎沒有很精準,有的人超大盤,有的人小小一坨?!

這次聚餐重點是喇賽(聊天),很忙亂的分食秀就免了,只針對自己點的深海辣味墨魚麵說說~
首先,用料部分夠大方,三隻蝦、五六個透抽和一個淡菜,NTD 230真的很經濟實惠,而且墨魚麵通常都比較貴說...為什麼一直繞著價錢打轉,很窮嗎╮(▔▽▔")╭

蝦子有先剝殼,透抽也處理的QQ不會老,除了吃完會牙齒黑黑,這道深海辣味墨魚麵帶著點點辣味和海鮮香,是很涮嘴的義麵。然後麵的硬度也是我愛的,但牙口不好?或喜愛稍軟口感的朋友最好請廚師調整,P&P的麵真的比較硬唷。
但是但是~麵好乾好乾好乾!!!要是墨魚source像其他友人一樣可以多些就好(只有我點墨魚,不知道是不是這家墨魚都乾巴巴)
深海辣味墨魚麵(NTD 230)



★P&P義法創意廚房(西門店)
addr:台北市成都路50號2樓
phone:02-23818980

<科教館Go好玩>飛閱臺灣,飛越台灣

早在去年就從中廣蘭萱時間得知齊柏林籌畫空拍台灣,那時一直期待電影<域忘>的上映,沒想到2013上映前還有個綠動地球●飛閱台灣特展。

可惜錯過2012台北電影節的觀賞機會,趁國立台灣科學教育館這波展覽,一定要先來震撼一下!


展覽以各項小主題為畫分,每面牆都有一個特色一個故事,像是一入場的阿朗壹古道便是近年炒得沸沸揚揚的環保議題,另外再從山(Moutain)、河(River)的角度去看台灣產業是如何對待自己的家園,在人們愛護地球的意識抬頭後又是怎麼作努力。

看到滿目瘡痍的山。。。


會很懷念原始、應有的面貌。。。


帶小朋友親近觀察自然也是一種守護方式~


透過齊柏林的鏡頭,每段鳥目台灣都是關懷母親台灣的一種角度,即使你是後段班出生的台灣囝仔,都能藉由短短幾分鐘的影片一窺環境的變化。


看了許多環境遭到破壞的高空照片,心情蠻差的T_T  但也要感謝齊柏林先生、台達電、阿布電影公司所付出的心力,讓我們正視自己土地上的變化~~美麗海岸線離我們越來越遠,蔥鬱的山林頂上無毛,希望我們傳給下一代手上的寶島依舊是物種豐富、人與大自然和諧相處的寶地。

謝謝你,齊柏林攝影師


以下僅列幾張圖片,更精采的資訊還要各位踴躍支持綠動地球●飛閱台灣特展,展覽開放到2012.11.30唷 0 .<

像墨水一樣的河流

我們先不愛惜山林,山林才不愛惜我們 …(⊙_⊙;)… 
讓自己有個機會親近這塊土地,撥個時間去科教館看看吧



★飛閱台灣●綠動地球(國立台灣科學教育館)
addr:台北市士商路一八九號
phone:02-66101234 # 1000、1005 
opening hours:9am-5pm(Mon.-Fri.)、9am-6pm(Sat.-Sun.)
           本展展期至2012年11月30日

C# / JS 無條件進位

用.NET寫Web就是用C#(或VB)和JavaScript,記錄一下數字的無條件進位寫法~

C#
Math.Ceiling(1.4) = 2 ;
JavaScript
Math.ceil(1.4) = 2 ;

Telerik Grid Custom Binding

Telerik Grid算是做得很完善,API也多~但客製化需求還是在所難免。
比如有個表單系統只提供最簡單的資料瀏覽,姑且不論是否下查詢條件,要是資料百萬筆豈不是起肖?!

較好的做法是用分頁區別之餘,但每次只取該分頁的資料,而不是一次取回百萬筆資料再作分頁

本文就要來介紹,如何實作Custom Binding

1. 計算總筆數(因為是CustomBinding,GridModel需要的總筆數必須自己計算)
public int QueryPOListIndex(GridCommand command)
{
var entity = mydata.PO.AsQueryable();
int ttlCount = entity.ToList().Count();
return ttlCount;
}


2. 像平常一樣取資料(請依照自己的需求和資料作變化)
public List<PO> QueryPOList(GridCommand command)
{
var entity = mydata.PO.AsQueryable();
//Sorting(必須有Default的Order By條件,否則會Error)
entity = entity.OrderBy(order => order.PONo);
//Then paging
if (command.PageSize > 0)
entity = entity.Skip((command.Page - 1) * command.PageSize);
entity = entity.Take(command.PageSize);
return entity.ToList();
}


前面二項為Bussiness Layer(POService),若專案架構較小~亦可將其寫在Controller中
3. Controller
//須注意的是, ViewBag.DataTotalCount在此頁載入時須先給予一預設值(ex:0),之後的查詢function再賦予正確值
public ActionResult ListPO()
{
ViewBag.POTotalCount = 0;
return View();
}

[GridAction(EnableCustomBinding = true)]
public ActionResult ListPO_CustomBinding(GridCommand command)
{
int totalCount = POService.QueryPOListIndex(command);
ViewBag.POTotalCount = totalCount;
List<POt> data = POService.QueryPOList(command);
return View(new GridModel
{
Data = data,
Total = totalCount
});
}


4. View
@(Html.Telerik().Grid<PO>()
.Name("Grid")
.Columns(columns => {
columns.Bound(c => c.PONo);
columns.Bound(c => c.DocDate);
columns.Bound(c => c.Company);
columns.Bound(c => c.Vendor);
columns.Bound(c => c.Status);
columns.Bound(c => c.CmpltReceived);
})
.Pageable(settings => settings.Total((int)ViewBag.POTotalCount))
.DataBinding(dataBinding => dataBinding.Ajax().Select("ListPO_CustomBinding", "Inbound"))
.EnableCustomBinding(true)

.Sortable()
.Groupable()
)

convert list to string

紀錄一下怎麼把字串組轉為string
字串組為List< string> los = new List< string>;

.NET 2.0
String.Join(String.Empty, los.ToArray());
說明網址

到了4.0多了更好用的新方法~
.NET 4.0
String.Join< string>(String.Empty, los);
說明網址


當然,如果你的字串要改以逗點或是分號來串連,那就不要放String.Empty,而是放 "," 或 ":" 嚕

Disable Automatic DataBinding


無論Telerik或Kendo UI的Grid,在頁面render時必定會去讀取要綁在Grid上的資料,也就是執行MVC中的Action method並將資料呈現在UI上,
以Telerik為例(@Html.Telerik().Grid< mydocument>()
.Name("Grid")
.DataBinding(d => d.Ajax().Select("Query", "Home"))
)

以Kendo UI為例@(Html.Kendo().Grid< myDocument>()
.Name("Grid")
.DataSource(dataSource => dataSource.Ajax()
.ServerOperation(false)
.Read(read => read.Action("Query", "Home")))
)


但,如果你期望一開始不做任何DataBinding,只放個白白的Grid,等使用者確實下條件才去後端撈資料,那就要想辦法阻止automatic databinding這件事發生,
Telerik的做法,是利用OnDataBinding的event// 判斷是否第一次載入
var isFirstLoad = true;
function onDataBinding(e) {
// 當第一次載入,不呼叫 Grid Ajax Select,直接 return
if (isFirstLoad) {
e.preventDefault();
return;
}
}

定義Grid Event
.ClientEvents(c => c.OnDataBinding("onDataBinding"))

那Kendo UI呢?
根據官方說法,目前尚未提供可取消DataSource之RequestStart的event
Currently it is not possible to cancel the RequestStart event of the DataSource. 
We will provide such functionality in the future releases. I am sorry for the inconvenience.

既然前端沒有event可阻擋,那只好在後端撈資料時丟個空instance給Grid,一樣能binding不拋錯,希望未來能盡快release這個event,不然還要多跑一次Action method

Getting Started with Kendo UI

首先來個Kendo UI的網址http://docs.kendoui.com/
雖然正式版剛釋出,但網路上能找的資源差不多都在這了

Kendo UI Complete for ASP.NET MVC(以下簡稱Kendo UI)使用方式和Telerik Extensions for ASP.NET MVC(以下簡稱Telerik)一樣,可下載壓縮檔自行解壓取用檔案,也可使用安裝檔直接將檔案裝在特定路徑。
這邊以安裝檔的方式快速截圖,並說明使用方式如下:




安裝完畢請瀏覽至C:\Program Files (x86)\Telerik\Kendo UI for ASP.NET MVC Q2 2012
  • 將js資料夾所有檔案複製到MVC專案的Scripts
  • 將styles資料夾所有檔案複製到MVC專案的Content
  • 加入Binary參考,路徑為wrappers\aspnetmvc\Binaries\Mvc3\Kendo.Mvc.dll
  • 在主版頁面加入下列資訊<link rel="stylesheet" href="@Url.Content("~/Content/kendo.common.min.css")">
    <link rel="stylesheet" href="@Url.Content("~/Content/kendo.default.min.css")">
    <script src="@Url.Content("~/Scripts/kendo.web.min.js")"></script>
    <script src="@Url.Content("~/Scripts/kendo.aspnetmvc.min.js")"></script>
  • web.config與Views\web.config皆加上namespace<add namespace="Kendo.Mvc.UI" />

Done!

Kendo UI誕生

Telerik前陣子放出消息,表示支援Telerik Extensions for ASP.NET MVC只到明年(2013 Q3),
而最大更新差不多就停留在目前的2012 Q2,之後版本多是修正bug和提升performance

取而代之的是這套Kendo UI Complete for ASP.NET MVC,今年7月已推出正式版,
簡單來說就是Kendo UI=CSS 3 + Html 5 + Javascript,以現階段版本還比不上Telerik的完善,開發文件也不盡完全,還不用急著升級
但未來若要朝MVC 4升級,可能要考慮轉用這套(Telerik Extensions for ASP.NET MVC只支援到MVC 3),另外Kendo對REST也提供比較好的支援,以微軟將推出的.Net Framework 4.5來看也是有此趨勢。

其他參考資訊
官方對一些疑慮的釐清
從Telerik升級到Kendo
Kendo UI Complete for ASP.NET MVC

使用jQuery傳遞Array

之前寫過一篇善用JavaScriptSerializer處理JSON資料,這次要傳遞的資料比較簡單,不是string就是List< string>,想當然爾會直覺地在前端用Array處理~方便咩。

JavaScript的Array長這樣
var myList = new Array();
最常見的用法就是把網頁上表單形式的排列資料,依所需取出以組合成陣列,
像是把table裡面每個的id值取出來
$('#myTable  tr').each(function () {
     var myId = $(this).attr('id');
     myList.push( myId  );
})
接著用$.post把資料往後送(我用MVC所以會有個Action接收)
$.post('myController/myAction', { json1: $.trim($('#textbox1').val()), json2: myList }, null, "json");

myAction如下
[HttpPost]
public JsonResult  myAction (string  json1, List< string>   json2)
{
     // do something
}
經過反覆檢驗,myList的確有值但json2總是null
解決辦法是traditional設為true,寫法有以下二種

● $.ajax設定traditional: true
$.ajax({
    type: "POST",
    url: 'myController/myAction',
    data: { json1: $.trim($('#textbox1').val()), json2: myList },
    null,
    dataType: "json",
    traditional: true
    // traditional 改為 ture .NET 才能成功接收陣列
});

● $.post傳值必須使用jQuery.param
var myObject = { json1: $.trim($('#textbox1').val()), json2: myList };
$.post('myController/myAction', $.param(myObject, true), null, "json");

參考資料
jQuery.param()
How can I post an array of string to ASP.NET MVC Controller without a form?

台北機廠巡禮

以前採買部門零食爾偶爾經過市民大道五段,都會對佔地廣袤卻無人出入的台北機廠感到好奇,這次參訪才得知原來人家一直都有在運作啦,我一直以為是廢墟XD

有這次巡禮,是因為都更後機廠將會搬遷至桃園富岡,搬遷並不會100 %保留原貌,故舉辦了連續幾周的巡禮讓民眾瞻仰下將消失的台北機廠。

別看走在前頭的人不多,人數多到直接加開第二梯次,第一梯次就破百人@_@


可能我參加巡禮首周的早上梯次(巡禮活動第一批),個人覺得導覽沒有很流暢,不過帶我們的組長人超好,知道我們聽的時候來不及拍照,最終還是應我們幾個死小孩的要求陪著再走一遭>//////<
因此建議想去巡禮的朋友,一旦發現導覽人員速度頗快,絕對要抓緊時間拍,因為很多地區是不給你自由晃的~畢竟機廠重地,而且機廠營運中..是有在辦公滴!

機廠耶機廠耶~可以走進去耶\(  ^ Q^)/ 



每個零件都有它的價值,別小看這些細如髮絲的紋路,磨光光就表示要退休啦!

退休就先丟這~


自強號界的老伯伯


8月就要搬走~以後不叫台北機廠T__T
泥看看,人家桃園有機場又有機廠XDD

導覽最後一站,則是常登上新聞,讓大家覺得台鐵員工很好命的澡堂  <( ̄oo, ̄)/ 

澡堂還在服役,這些衣服都是真的,還有吊嘎說XDD



靠.....人超多...

澡堂外部


澡堂通風窗有個可愛的名稱"虎耳"
礙於機廠人員緊迫盯人=..=|||  只能墊高腳勉強用很偏的角度拍拍嘞


101也入鏡的場景令人想到四四南村,可惜的是機廠這的角度將不復見

組長說這是巴洛克風





人工打卡也有防作弊( ̄口 ̄)!!







死觀光客一定要跟識別證合影!會回收給下梯次人員說

這裡也有防空洞捏


喔對了,如果跟piggy一樣只能假日參加,免報名~直接到台北機廠大門就有人招呼你進去嚕
參展資訊請以台鐵局官網為準:Fun暑假,臺北機廠文化巡禮