ASP.Net MVC3で作成しているモバイルアプリケーションがあります(JQueryの控えめな検証を使用)。その一環として、ユーザーから名前とメール情報を収集しています。私のモデルには次のようなフィールドが含まれています:
[Required] public String Name {get; set;}
[Required] public String Email {get; set;}
私の見解では、次の形式の入力要素があります。
@Html.EditorFor(m => m.Name);
@Html.EditorFor(m => m.Email, "Email");
ここで、文字列エディタテンプレートと電子メールエディタテンプレートは同じですが、電子メールテンプレートがtype属性を明示的に「email」に設定している点が異なります。
データを入力せずに最初にフォームを送信すると、両方のフィールドが必須であるというクライアント側の検証が行われます。[名前]フィールドに入力を開始すると、検証の警告がすぐに消えます。[電子メール]フィールドに入力を開始しても、検証は残ります。
次に、[送信]をクリックすると、[メールフィールドが必須です]にもかかわらず、フォームが正しく送信されます。検証メッセージは表示されたままです。
電子メールエディタテンプレートを変更して、type="email"ではなくtype="text"を設定すると、検証によって期待どおりの方法がクリアされます(ただし、モバイルユーザーは電子メール固有のキーボードを使用できません)。
2つの質問:(1)なぜそれがそのように振る舞うのですか?(2)「適切に」動作させるにはどうすればよいですか(つまり、電子メールが入力されたときに「必要な」検証が消える)?