0

次のasp.netコードがあります:

<script type="text/javascript">
    $(document).ready(function () {$(".button").click(function (event) {
        alert("Button pressed!");
    });
});
</script>
<asp:Button ID="button" runat="server" CssClass="button" />
<asp:UpdatePanel ID="testUpdatePanel" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="testTextBox" EventName="TextChanged" />
    </Triggers>
    <ContentTemplate>
        <asp:TextBox ID="testTextBox" runat="server" AutoPostBack="true" CausesValidation="true" ValidationGroup="test" CssClass="Test" />
        <asp:RegularExpressionValidator ID="testRegularExpressionValidator" runat="server" ControlToValidate="testTextBox" ErrorMessage="*2" ValidationExpression="(19|20)\d\d\-(0[1-9]|1[012])\-([012][0-9]|3[01])" ValidationGroup="test" />
        <asp:Label ID="testLabel" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

そして、次の分離コード:

Private Sub testTextBox_TextChanged(sender As Object, e As System.EventArgs) Handles testTextBox.TextChanged
    If (Not Page.IsValid) Then
        Return
    End If
    testLabel.Text = testTextBox.Text
End Sub

これをFF(v15、v15.0.1)で実行すると、テキストボックスに1987-05-03と入力してEnterキーを押すと、ボタンがトリガーされ、その後、testTextBox_TextChangedへのポストバックが返され、彼の行に到達するとIf (Not Page.IsValid)取得されます次の例外:

Page.IsValid cannot be called before validation has taken place. It should be queried in the event handler for a control that has CausesValidation=True and initiated the postback, or after a call to Page.Validate.

IEで同じことをすると、ボタンがトリガーされることはなく、例外も発生しません! では、なぜ FF はこのように誤動作するのでしょうか。どのパネルにも DefaultButton を設定していません。

4

2 に答える 2

1

追加

Page.Validate("test")

その行の前に、すべてのシナリオで検証されることが保証されます。IEではまだ発生している可能性がありますが、エラーは何とか飲み込まれています...

于 2012-09-21T19:34:44.830 に答える
0

CausesValidationプロパティをに追加trueしますTextBox

または、プロパティthis.Validateを確認する前に電話してくださいIsValid

上記は例外を削除しますが、IEおよびFFとの非互換性は残ります

于 2012-09-21T15:40:05.333 に答える