5

HTML5 セマンティック マークアップが有効になっている ASP.NET MVC4 プロジェクトがあります。出力を使用@Html.EditorFor(m => m.MyDateTimeField)する場合は、入力を使用しtype="datetime"ます。EditorForHTML5 マークアップの生成を停止できるようにしたい。これどうやってするの?

現時点では、これは Opera のみの問題です。これは、他のブラウザ (私の知る限り) がサポートしていないためtype="datetime"です。フィールドにjQueryの日付ピッカーがあるので、OperaではjQueryの日付ピッカーとブラウザの日付ピッカーの両方を取得します。

次のいずれかを使用して修正できます
。js を使用して入力タイプを変更します
b. Html.TextBoxFor(m => m.MyDateTimeField)
cを使用します。カスタム エディター テンプレートを使用する
d. datetime がサポートされているかどうかを検出するには、modernizr を使用します。サポートされている場合は、jQuery データピッカーを使用しないでください。

私が望む解決策は、で HTML5 生成を無効にすることですHtmlHelper.EditorForHtmlHelper.EditorForプロジェクトの作成時に「html5 セマンティック マークアップ」チェックボックスをオンにしなかった場合と同じように機能させたいと考えています。

EDIT: もう少し検索した後、モデルフィールドに適用して、html5の一致ではなくDataTypeAttribute入力としてレンダリングするように強制できるものに出会いました。type="text"これは潜在的な修正ですが、理想的とは言えません。EditorFor確かにhtml5 (および同等のヘルパー)をオフにするスイッチがどこかにあるに違いありませんか?

もう少し情報: 2 つのプロジェクトがあります。最初のものは「Html5 セマンティック マークアップ」をオンにして作成され、もう 1 つはオフで作成されました。最初のものは を使用するときに html5 入力タイプを使用しますEditorForが、2 番目のものは使用しません。EditorForを削除せずに、最初のプロジェクトの動作を停止する必要がありEditorForます。どこかに設定があるはず?

4

2 に答える 2

2

これは実際に導入され、文書化されていない機能です (厄介な...)。基本的に、ASP.NET MVC 4 は Date と DateTime の内部エディター テンプレートを定義するようになりました。ASP.NET 3 にはテンプレートがなかったので、私は個人的に、すべての DateTime 型を処理し、DataTypes.Date と DataTypes.DateTime を処理する DateTime.cshtml という名前の EditorTemplate (Views\Shared\EditorTemplates 内) を持っていました。ここで、両方のテンプレートをオーバーライドする必要があります。汚い。

編集:基本的に、既存のコードに触れたくない場合は、Date.cshtml と DateTime.cshtml の 2 つのテンプレートを定義します@Html.TextBoxFor(model => model)Views\Shared\EditorTemplates\

于 2012-08-17T21:05:13.913 に答える
2

問題は、パッケージ参照が適切に更新されていないプロジェクトの 1 つにあるため、html5 セマンティック レンダリングが表示されます。

この問題は、ASP.NET MVC ベータ版を RC にアップグレードしたときに発生し、Nuget を介してすべてのパッケージを更新するか、アセンブリへの参照を手動で追加するかの 2 つの方法で問題を解決できます。

問題と解決策は、Scott によって明確に説明されています

于 2012-10-04T09:57:39.917 に答える