mvc EditorTemplate DisplayMod

时间:2013-07-29 19:18:20

标签: asp.net-mvc-4

我正在使用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" })
}

1 个答案:

答案 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