サーバー側の検証と同様にクライアント側の検証も必要です。私はこれを次のように認識しました:
モデル:(モデルには、Testクラスを含むDataModel(dbml)があります)
namespace MyProject.TestProject
{
[MetadataType(typeof(TestMetaData))]
public partial class Test
{
}
public class TestMetaData
{
[Required(ErrorMessage="Please enter a name.")]
[StringLength(50)]
public string Name { get; set; }
}
}
コントローラーは特別なものではありません。
景色:
<% Html.EnableClientValidation(); %>
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post,
new AjaxOptions {}, new { enctype = "multipart/form-data" }))
{%>
<%= Html.AntiForgeryToken()%>
<fieldset>
<legend>Widget Omschrijving</legend>
<div>
<%= Html.LabelFor(Model => Model.Name) %>
<%= Html.TextBoxFor(Model => Model.Name) %>
<%= Html.ValidationMessageFor(Model => Model.Name) %>
</div>
</fieldset>
<div>
<input type="submit" value="Save" />
</div>
<% } %>
これをすべて機能させるために、jsファイルへの参照も追加しました。
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
最終的には機能する必要がありますが、100%は機能しません。ボタンを押した後、ページを更新せずに検証します。また、クライアント側の「半分」の検証も行います。テキストボックスにテキストを入力してから、入力したテキストをバックスペースする場合のみ。クライアント側の検証が表示されます。しかし、コントロール間をタップしてこれを試してみると、クライアント側の検証はありません。
私はいくつかの参照か何かを逃しますか?(私はAsp.Net MVC 2 RTMを使用しています)