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

Asp.net mvc 带有HTML5语义标记HtmlHelper.EditorFor的MVC4项目使用HTML5输入类型,asp.net-mvc,html,asp.net-mvc-4,html-helper,mvc-editor-templates,Asp.net Mvc,Html,Asp.net Mvc 4,Html Helper,Mvc Editor Templates,我有一个启用了HTML5语义标记的ASP.NETMVC4项目。使用@Html.EditorFor(m=>m.MyDateTimeField)时,输出是带有type=“datetime”的输入。我希望能够停止EditorFor生成HTML5标记。我该怎么做 目前这只是Opera中的一个问题,因为其他浏览器(据我所知)不支持type=“datetime”。我在字段上有一个jQuery日期选择器,因此在Opera中,我同时获得jQuery日期选择器和浏览器日期选择器 我可以使用以下任一项进行修复: A

我有一个启用了HTML5语义标记的ASP.NETMVC4项目。使用
@Html.EditorFor(m=>m.MyDateTimeField)
时,输出是带有
type=“datetime”
的输入。我希望能够停止
EditorFor
生成HTML5标记。我该怎么做

目前这只是Opera中的一个问题,因为其他浏览器(据我所知)不支持
type=“datetime”
。我在字段上有一个jQuery日期选择器,因此在Opera中,我同时获得jQuery日期选择器和浏览器日期选择器

我可以使用以下任一项进行修复:
A.使用js更改输入类型
B使用
Html.TextBoxFor(m=>m.MyDateTimeField)

C使用自定义编辑器模板
D使用Modernizer检测是否支持datetime,如果支持,则不要使用jQuery数据采集器

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

编辑: 经过更多的搜索,我发现了
DataTypeAttribute
,我可以将它应用到我的模型字段中,强制将它们呈现为输入
type=“text”
,而不是html5匹配。这是一个潜在的解决方案,但并不理想。在
EditorFor
(以及等效的助手)中,肯定有一个开关可以关闭html5

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

这才是真正引入的功能,没有记录在案(讨厌…)。基本上ASP.NETMVC4现在定义了日期和日期时间的内部编辑器模板。在ASP.NET 3中没有模板,所以我个人有一个名为DateTime.cshtml的EditorTemplate(在Views\Shared\EditorTemplates中),它处理所有DateTime类型并处理数据类型.Date vs DataTypes.DateTime。现在您需要覆盖这两个模板。讨厌


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

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

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


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

我尝试在VS11RC中创建MVC4项目,但没有看到旧的HTML5语义标记复选框。您始终可以右键单击mvc项目,卸载它,然后在编辑器中打开它以查找设置。我想这就是设置的地方。请参阅我的教程第4部分中关于处理HTML5/jQuery的技巧。未来是HTML5,而不是jQuery,因此如果HTML5完成了这项工作,您应该禁用jQuery。@RickAndMSFT。如果你重读我的问题,你会注意到我已经说过(d),这是一个我已经知道并且不想使用的解决方案。我想告诉我的项目停止使用html5模板。关于HTML5是未来而不是jQuery的观点,这很好,但现在就是现在。当前的HTML5输入类型看起来不是很好,并且不可定制到第三方等价物的程度。@flem-你读过我的教程吗?该逻辑允许您检测并删除MVC生成的数据-属性-只需修改代码即可。它有一个删除HTML5属性的例子。谢谢,但这不是我正在寻找的解决方案(正如我在问题中提到的)。我希望能够使生成html5输入的项目中的EditorFor的行为与生成html4的项目相同,而无需编写代码。必须有某种东西告诉编译器在哪里查找内置模板…@flem AFAIK-没有这样的选项-它们是内置的,您不能通过配置中的开关禁用它们-只覆盖内置模板。@flem ALL AFAIK语义标记是新的html5布局元素,与输入无关类型。你如何解释它在一个项目中工作而不是在另一个项目中工作?有什么区别?一种是使用非html5内置模板,另一种是使用html5内置模板。项目如何知道要使用哪个集合?您是否确定这两个项目都运行在MVC4之上,尤其是您没有看到生成html5字段的项目?如果它是一个mvc3项目,并且您只是将程序集引用更新为mvc4,那么您还需要更新web.config程序集版本。MVC4项目没有“语义html5”选项。它过去只使用不同的布局html和参考modernizr.js,仅此而已。它对editorfor生成的内容没有影响。谢谢@Mark。这让我很烦恼!赏金让一切变得不同。