クライアント側の検証をデータ注釈と組み合わせて使用すると問題が発生します。このプロジェクトでは、ASP.NET Framework 4.5、MVP パターンを備えた Web アプリケーション、およびユーザー コントロールを動的に読み込むための jQuery Ajax 呼び出しを使用しています。
これは、検証が必要な入力要素を含む (削除された) ユーザー コントロールです。
<form id="insertArtist" class="form-horizontal">
<fieldset>
<legend>Add new artist</legend>
<div class="control-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
<asp:TextBox runat="server" ID="name" ClientIDMode="Static" CssClass="input-medium"></asp:TextBox>
<ml:DataAnnotationValidator runat="server" ID="davName" ControlToValidate="name" EnableClientScript="true" PropertyToValidate="Name" SourceTypeName="Music.Library.Domain.Models.Artist, Music.Library.Domain">
</ml:DataAnnotationValidator>
</div>
<div class="form-actions">
<button id="save" class="btn btn-primary" name="submit" type="submit">Save</button>
<button id="cancel" class="btn">Cancel</button>
</div>
</div>
</form>
このユーザー コントロールは、次の ajax 呼び出しを使用して動的に読み込まれます。
$('#add').click(function () {
$.ajax({
url: "/Artist/Manage/Insert.ascx.axd",
type: "POST",
dataType: "html",
success: function (obj) {
$('#body_artist').html($(obj));
}
});
});
これは、ユーザーが保存をクリックしたときに実行される jquery です。
$('#save').click(function (event) {
event.preventDefault();
$.ajax({
url: "/artist/add.axd",
type: "POST",
dataType: "html",
cache: false,
async: true,
data: 'Ajax=true&' + $('#insertArtist').serialize(),
beforeSend: function (jqXHR, settings) {
$('#loading').show();
},
success: function (data) {
if (data == "succes") {
showNotification('succes', 'Succesfully added artist');
} else {
showNotification('error', 'Error while adding artist: ' + data);
}
},
error: function (jqXHR, textStatus, errorThrown) {
showNotification('error', 'Error while adding artist: ' + data);
},
complete: function () {
$('#loading').hide();
}
});
});
現在、asp.net コントロールからのトリガーがないため、カスタム データ注釈バリデータは検証されません。
Page_ClientValidate()、ValidateEnable()、および Validate() メソッドを使用して、Javascript を使用して検証を試みました。残念ながら、これを試してみると、同じエラーが何度も発生します。
Page_ClientValidate is not defined
他の方法についても同じ話です。私はここで機知に富んでいます。
これらのクライアント検証メソッドが機能しないのは、UserControl が動的に読み込まれるためですか? EnableClientScript を true に設定しました。
または、これを実装する方法について別のアイデアを持っている人はいますか? データ注釈を使用したいと思います。
前もって感謝します!