MVC3 アプリケーションで入力フィールドを検証するために DataAnnotations を使用しています。正規表現の検証を使用しています。IE8 と IE9 の UI で検証メッセージが表示されます。しかし、クライアント側の検証が失敗した後でも [保存] ボタンを押すと違いに気付きます。IE9 は私をクライアント側にとどめます。ただし、IE8では、コントロールはコントローラーアクションに移動し、検証がエラーになるようにコントローラー側のTryValidateModelが必要です。
IE8がサーバーラウンドトリップを行っている理由を知っている人はいますか?
編集:コードを追加します。これは cshtml に入ります。
@using (Html.BeginForm("Person", "Account", FormMethod.Post))
{
<span class="resultError" id="resultError">
@Html.ValidationMessageFor(model => model.Name, "Name should not contain special characters")
</span>
<table>
<tr>
<td class="editor-label">Name:
</td>
<td class="editor-field">@Html.EditorFor(model => model.Name)
</td>
</tr>
</table>
<input type="submit" name="btnKey" value="Save" />
}
これは DataAnnotation を使用した部分クラスです。Person クラスは EF によって駆動されます。そのため、検証を行うためのメタデータ クラスを作成する必要があります。
[MetadataType(typeof(personMetadata))]
public partial class person: EntityObject
{
public class personMetadata
{
[Required]
[RegularExpression(@"[A-Za-z0-9]+")]
public object Name { get; set; }
}
}
編集:参照されているJavaScriptファイルを追加します。「~/Scripts/jquery.validate.min.js」「~/Scripts/jquery.validate.unobtrusive.min.js」