Agenda
前言
View
頁面(razor
,aspx
…)都是繼承WebViewPage<TModel>
頁面,
今天會帶大家寫一個範例完成透過Route
判斷多國錢幣符號.
多國路由設定
在Route
設定上多一個{culture}
區塊.如果使用者沒有輸入預設使用英文(en
).
1 | routes.MapRoute( |
取得貨幣符號
建立一個介面ICurrency
裡面有個方法可以取得傳入國家貨幣符號.
在CurrencyProvider
類別透過Routes.Values["culture"]
取得使用者傳遞語系國家.
透過此參數可以知道使用者想要使用哪個國家貨幣.
1 | public interface ICurrency |
擴充 WebViewPage
在Autofac
多註冊一個
1 | builder.RegisterType<CurrencyProvider>().As<ICurrency>(); |
最後在建立一個CountryViewPage<TModel>
抽象類別繼承於WebViewPage<TModel>
.
在此類別中建立一個ICurrency
屬性,並在建構子中透過DependencyResolver.Current.GetService
給值
因為這間已經替換成
Autofac
解析器,所以會吃Autofac
註冊的類別.
1 | public abstract class CountryViewPage<TModel> : WebViewPage<TModel> |
RazorView使用擴充後WebViewPage
在View
上使用新WebViewPage<TModel>
只需要在最上面加@inherits CountryViewPage<object>
.
我們就可以透過@
呼叫Currency
物件.
1 | @inherits CountryViewPage<object> |
如果每個頁面都需要使用新的WebViewPage<TModel>
可以透過web.config
新增加一個<pages pageBaseType="CountryViewPage">
將Razor
產生的C#
程式碼繼承於此類別
1 | <system.web.webPages.razor> |
小結:
其實我們也可以繼承WebViewPage<TModel>
來擴充View
多變性
這邊有一個題目提供讀者來完成透過上面概念完成多國語系,這裡提供一條方法完成
寫一個
string transfer(string key)
透過Resource
檔案來完成;
Github範例程式原始碼 CustomerWebViewPage
分支上
此文作者:Daniel Shih(石頭)
此文地址: https://isdaniel.github.io/ithelp-day29/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!