最近看到有一篇文章提到了利用 Func 的委派特性,將一個有指定好 Method 的 Func 給放到 ViewBag 中...
原先雖然知道ViewBag 是用 dynamic 這個型別的包裝,但是只會用它來裝一些資料,然後在View的地方使用。但是後來看到搭配Func的使用方式,所以想說動手試試看,順便紀錄一下。
這邊用北風資料庫做為資料來源,然後生成了一個產品的列表。接下來我們挑單價這個欄位進行調整。主要會進行該欄位的格式化,然後依據金額的大小分成十個等距(其實是11個),並變換字體的顏色。
有時候這種類型的處理,會有些人直接將相關的判斷跟處理都寫在View裡。雖然也不是不行,但就是感覺View搶了Controller的工作。此時,就可以透過ViewBag把那些不該View做的事,丟回去給Controller。
首先,先到Controller裡建立一個方法,將前面提到的需求部分寫在裡面。這邊方法裡面寫什麼就不太重要了,注意傳入(decimal?)跟回傳(string)的資料型態。
然後再到產生產品列表的Action裡把該方法放到ViewBag裡。這邊要注意指定給Func時的資料型態,左邊的就是指定方法的傳入值(decimal?),然後最右邊的就是回傳值(string)。
接著我們就可以直接在View的地方使用剛剛建立給ViewBag的方法了。
參考資料: