5

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

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


我可以使用以下任何一种来修复:使用 js 更改输入类型
b. 使用Html.TextBoxFor(m => m.MyDateTimeField)
c。使用自定义编辑器模板
d. 使用modernizr来检测是否支持日期时间,如果支持,不要使用jQuery datapicker

我想要的解决方案是在HtmlHelper.EditorFor. HtmlHelper.EditorFor如果我没有在项目创建时勾选“html5 语义标记”复选框,我想以相同的方式运行。

编辑: 经过更多搜索后,我发现了DataTypeAttribute可以在模型字段上应用的内容,以强制将它们呈现为输入type="text"而不是 html5 匹配。这是一个潜在的解决方案,但并不理想。当然必须有一个开关来关闭html5 EditorFor(和等效的助手)?

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

4

2 回答 2

2

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

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

于 2012-08-17T21:05:13.913 回答
2

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

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

Scott在这里清楚地解释了问题和解决方案。

于 2012-10-04T09:57:39.917 回答