我有一个启用了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
的行为方式。某处必须有设置?
答案 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清楚地解释了问题和解决方案。