私は 2 つの ASP.Net ページを持っています。1 つには、jQuery ダイアログ ウィンドウを保持する空の div と、検証したいコントロールを含む別のページの .load() コントロールに必要なコードが含まれています。(通常の HTML テーブルに含まれる ASP.Net テキストボックスです) 以下のコードは、ダイアログを開き、コントロールを含む 2 番目のページをロードするために使用されます。
$(".open-dialog").click(function () {
$("#hfAddressHash").val($(this).attr('class').split(' ')[1]);
$.ajaxSetup({ cache: false }) //Stops annoying caching problem.
$('#dialog').load('jQueryLoad.aspx?Hash='123' + ' #divTest');
dlg.dialog('open');
});
2 ページ目に表示されるコントロールの例は次のとおりです。
<table>
<tr>
<th>Source System(s)</th>
<td width="160"><asp:Label ID="lblSource" runat="server"></asp:Label></td>
<th>Firm</th>
<td><div class="draggable"><asp:Label ID="lblCountry" runat="server"></asp:Label></div></td>
<td width="20"><asp:ImageButton ID="imgArrow" runat="server" CssClass="copyAddress Country" ImageUrl="/Intranet/_Resources/Icons/arrow.png" /></td>
<th>Firm</th>
<td><asp:TextBox ID="txtCountry" CssClass="droppable" runat="server"></asp:TextBox></td>
</tr>
たとえば、jQuery検証を使用して、上記の「txtCountry」コントロールを必須フィールドにしたいと思います。私の検証とダイアログ機能のコードは次のとおりです。
$("#form1").validate();
if ($("#txtCountry").is(":visible")) {
$("#txtCountry").rules("add", { required: true });
}
var dlg = $("#dialog").dialog({
autoOpen: false,
modal: true,
height: 820,
width: 860,
buttons: {
Cancel: function () {
$("#dialog").dialog('close');
},
Submit: function () {
if (!$('#form1').valid()) { // Validate on Submit
return false;
}
var names = [];
$('#cblTypes input:checked').each(function () {
names.push($(this).val());
});
$.ajax({
type: "POST",
url: "AddressView.aspx/postAddress",
data: '{"OwnerRef":"' + $("#hfClient").val() + '"}',
async: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
form1.submit();
},
error: function (msg) {
alert(msg.d);
}
});
}
}
});
jquery ダイアログに含まれる「送信」ボタンを押すと、ページは「txtCountry」コントロールを意図したとおりに検証しません。ここで何が欠けていますか?