我正在使用MVC-4创建一个移动网站。
应该从数字键盘输入整数字段,我使用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" })
}
答案 0 :(得分: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
。