2

我正在使用 MVC-4 创建一个移动网站。

整数字段应该从数字键盘输入,我使用 EditorTemplatenumber创建一个这样的 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" })
}
4

1 回答 1

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将会呈现。

于 2013-07-29T20:59:21.987 回答