2013-07-29 111 views
2

我正在使用MVC-4創建移動網站。mvc EditorTemplate DisplayMod

整型字段應該從數字鍵盤輸入,我用的是EditorTemplate number至極創建一個像這樣的HTML元素:

<input ... type="number" value="45" /> 

我的客戶不欣賞他的iPhone出這樣的數字鍵盤並要求我顯示使用type="tel"而不是type="number"顯示的電話鍵盤。

我正在努力如何在我的EditorTemplate number.cshtml中完成此操作。

我創建了一個獨立的iPhone DISPLAYMODE但我不知道如何使用它與EditorTemplate結合,我試圖將其複製到number.iPhone.cshtml但EditorTemplates似乎不工作的方式......

有一些方法來檢索當前的DisplayMode所以我可以解決這個問題?

// pseudo code I guess … 

@if(DisplayMode == "iPhone")  
{ 
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", type = "tel" }) 
}  
else  
{ 
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", type = "number" }) 
} 

回答

2

我試圖將其複製到number.iPhone.cshtml但EditorTemplates似乎不工作的方式......

不,編輯模板的工作原理完全方法一樣所有其他意見。因此,假如你已經註冊名爲iPhone的顯示模式(因爲開箱有沒有這樣的顯示模式):

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone") 
{ 
    ContextCondition = context => context.Request.UserAgent.... some condition on the User Agent 
}); 

,並假設你有以下的模型,被傳遞到您的視圖:

public class MyViewModel 
{ 
    [DataType("Number")] 
    public decimal Foo { get; set; } 
} 

在其中渲染爲Foo財產照常編輯模板:

@Html.EditorFor(x => x.Foo) 

然後假設你打你的網站的用戶代理是個匹配當你註冊你的iPhone顯示模式時,你寫的條件,將會呈現~/Views/Shared/EditorTemplates/Number.iPhone.cshtml

+0

我一直在我的模型中測試這個'int',期望使用'Number.cshtml',因爲事實證明它使用'Int32.cshtml'作爲'int'(offcourse)。所以現在它工作得很好。 謝謝! – Jurjen