このプロジェクトの特徴は、サーバー側の検証にエンタープライズ ライブラリを使用し、クライアント側の検証に jQuery を使用することです。たとえば、次の単純なフォームがあります。
<asp:Content ID="_mainContent" ContentPlaceHolderID="MainContent" runat="server">
<script src="../../../Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<script src="../../../Scripts/jquery.validate.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#aspnetForm").validate({
rules: {
"<%= _txtProjectName.UniqueID %>": {
required: true
}
}
});
});
</script>
<asp:TextBox ID="_txtProjectName" runat="server" CssClass="textBoxWithValidator_long" />
<entlib:PropertyProxyValidator id="_validatorProjectName" runat="server" ControlToValidate="_txtProjectName"
PropertyName="ProjectName" SourceTypeName="LabManagement.Project.Project" />
<asp:Button CssClass="cell_InlineElement" ID="_btnSave" runat="server" Text="Save" onclick="_btnSave_Click"
Width="50px" />
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
</asp:Content>
問題は次の部分です。AJAX.NET 機能を実装する前に、クライアント側の検証が正しく機能していました。そのため、ページに ScriptManager (コードの最後の 2 行) を追加する必要があります。しかしその後、次の状況が現れました。
InternetExplorer ((7) - IE のみ !!! - Firefox ではすべて正常に動作) 保存ボタンをクリックした後、テキスト ボックスの ProjectName を空のままにしておくと、クライアント側の jquery 検証が表示されますが、(!) とにかくページはサーバーに送信されます。
いくつかのメモ:
- ページから PropertyProxyValidator を削除すると、クライアント側の検証は IE で正しく機能しますが、特定のプロジェクトに必要です。
- 問題は、PropertyProxyValidator の追加後にフォームに挿入される関数 WebForm_OnSubmit() にあるようです。( ...
<form name="aspnetForm" method="post" action="Project.aspx?TransType=NewProject" onsubmit="javascript:return WebForm_OnSubmit();" ...>
)
誰か助けてください。