带有HTML5语义标记的MVC4项目HtmlHelper.EditorFor使用HTML5输入类型

时间:2012-07-31 11:31:55

标签: asp.net-mvc html5 asp.net-mvc-4 html-helper mvc-editor-templates

我有一个启用了HTML5语义标记的ASP.NET MVC4项目。使用@Html.EditorFor(m => m.MyDateTimeField)时,输出是type="datetime"的输入。我希望能够阻止EditorFor生成HTML5标记。我怎么能这样做?

目前这只是Opera中的一个问题,因为其他浏览器(据我所知)不支持type="datetime"。我在这个领域有一个jQuery datepicker所以在Opera中我得到了jQuery datepicker和浏览器datepicker。

我可以使用以下任何一种方法修复:
一个。使用js更改输入类型
湾使用Html.TextBoxFor(m => m.MyDateTimeField)
C。使用自定义编辑器模板
d。使用modernizr检测是否支持datetime,如果支持,则不要使用jQuery datapicker

我想要的解决方案是在HtmlHelper.EditorFor中禁用HTML5生成。我希望HtmlHelper.EditorFor的功能与我在项目创建时没有勾选“html5 semandtic markup”复选框时的功能相同。

修改 经过一番搜索后,我遇到了DataTypeAttribute,我可以在我的模型字段上应用它来强制它们作为输入type="text"而不是html5匹配。这是一个潜在的解决方案,但它不太理想。当然必须有一个开关来关闭EditorFor中的html5(和等效的助手)?

更多信息: 我有两个项目。第一个是用“Html5语义标记”创建的,另一个没有。第一个使用html5输入类型时使用EditorFor,第二个不使用。我需要在不删除EditorFor的情况下停止第一个项目EditorFor的行为方式。某处必须有设置?

2 个答案:

答案 0 :(得分:2)

这是真正的功能,已经介绍并没有记录(令人讨厌......)。 ASP.NET MVC 4现在基本上为Date和DateTime定义了内部编辑器模板。在ASP.NET 3中没有模板,所以我个人有一个名为DateTime.cshtml的EditorTemplate(在Views \ Shared \ EditorTemplates中),它处理所有DateTime类型并处理DataTypes.Date和DataTypes.DateTime。现在您需要覆盖两个模板。讨厌。

编辑:基本上,如果您只是不想触摸任何现有代码,请在@Html.TextBoxFor(model => model)中定义两个模板Date.cshtml和DateTime.cshtml Views\Shared\EditorTemplates\

答案 1 :(得分:2)

问题出在一个项目中,包引用未正确更新,因此您看到了html5语义呈现。

当您将ASP.NET MVC测试版升级到RC时会出现此问题,并且有两种方法可以解决问题:通过Nuget更新所有软件包或手动添加对程序集的引用。

斯科特here清楚地解释了问题和解决方案。