@using(Html.BeginForm)を通常の<form>
タグに置き換えた後、クライアント側の検証が破綻することが判明しました。 ソースを見たとき、タグの並べ替えを除いてhtml出力は同じです。 これにより、クライアント側の検証が機能しないのはなぜですか?Using(Html.BeginForm)ではなくRawフォームタグを使用すると、クライアント側の検証が中断される
0
A
答えて
0
Html.BeginForm
を呼び出すと、対応する入力フィールドを生成するときに、TextBoxFor、CheckBoxFor、...などのヘルパーがHTML5 data- *属性を出力するという効果を持つフォームコンテキスト変数が設定されるためです。例えばフォームなしでこれらのヘルパーの1つを使ってみると、入力にはクライアント側の検証で使用されるHTML5のデータ属性がないことがわかります。
手動でフォームのコンテキストを作成することでごまかすことができます:
@{ViewContext.FormContext = new FormContext();}
<form ....>
@Html.EditorFor(x => x.Foo)
<button type="submit">OK</button>
</form>
でもねえ、なぜあなたは、手動で代わりに適切なURLを生成するの世話をする、対応するヘルパー、メソッドを使用しての形式をハードコーディングする必要があり、エンコーディング、...?
ありがとうございました。私はT4Mvcを試していましたが、BeginFormヘルパで生成された文字列を使用できることがわかりました。 – jaffa
@ダーリン:私はあなたに手動でフォームをハードコードする理由を与えます。 'BeginForm()'は、HTMLの属性をサポートしていません。残念ながら、私はこの場合に大きな解決策を見ません。 –