0

レコードの編集、削除、および挿入を可能にする小さなテーブルを作成しました。

ここに画像の説明を入力

テーブル (DataGridView、バインド) は簡単です。[編集] をクリックして [編集] モード ([キャンセル] が表示されます) に入り、新しい値を入力して [追加] をクリックして新しいレコードを挿入します。

各フィールドには一連のルール (x と y の間、すべて数値) があるため、それらは MaskedEditExtender と MaskedEditValidator に関連付けられています。

(列 1 の例):

<asp:TemplateField HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Right" FooterStyle-HorizontalAlign="Right" HeaderText="First bus #">
    <ItemTemplate>
        <asp:Label runat="server" ID="BusIdStartLabel" Text='<% #Bind("BusIdStart","{0:D4}") %>' />
    </ItemTemplate>
    <EditItemTemplate>
        <ajaxToolkit:MaskedEditExtender runat="server" ID="BusIdStartTextBoxMaskedEditExtender" TargetControlID="BusIdStartTextBox" BehaviorID="EditBusIdStartTextBoxBehavior"
                        MaskType="Number"
                        Mask="9999" PromptCharacter=" "
                        InputDirection="RightToLeft"
                        OnInvalidCssClass="maskedEditError" OnFocusCssClass="maskedEditFocus"
                        AutoComplete="False" ErrorTooltipEnabled="True" MessageValidatorTip="False" />
        <ajaxToolkit:MaskedEditValidator runat="server" ID="BusIdStartTextBoxMaskedEditValidator" ControlToValidate="BusIdStartTextBox" ControlExtender="BusIdStartTextBoxMaskedEditExtender"
                        MinimumValue="0" MaximumValue="9999"
                        IsValidEmpty="False" Display="None"
                        InvalidValueMessage="Enter a value between 0000 and 9999"
                        MaximumValueMessage="Enter a value between 0000 and 9999"
                        EmptyValueMessage="Enter a value between 0000 and 9999" />
        <asp:TextBox runat="server" ID="BusIdStartTextBox" Text='<%  #Bind("BusIdStart","{0:D4}") %>' Width="2.5em" Height="13px" CssClass="rightAlignTextBox" />
    </EditItemTemplate>
    <FooterTemplate>
        <ajaxToolkit:MaskedEditExtender runat="server" ID="BusIdStartTextBoxMaskedEditExtender" TargetControlID="BusIdStartTextBox" BehaviorID="FooterBusIdStartTextBoxBehavior"
                        MaskType="Number"
                        Mask="9999" PromptCharacter=" "
                        InputDirection="RightToLeft"
                        OnInvalidCssClass="maskedEditError" OnFocusCssClass="maskedEditFocus"
                        AutoComplete="False" ErrorTooltipEnabled="True" MessageValidatorTip="False" />
        <ajaxToolkit:MaskedEditValidator runat="server" ID="BusIdStartTextBoxMaskedEditValidator" ControlToValidate="BusIdStartTextBox" ControlExtender="BusIdStartTextBoxMaskedEditExtender"
                        MinimumValue="0" MaximumValue="9999"
                        IsValidEmpty="False" Display="None"
                        InvalidValueMessage="Enter a value between 0000 and 9999"
                        MaximumValueMessage="Enter a value between 0000 and 9999"
                        EmptyValueMessage="Enter a value between 0000 and 9999" />
        <asp:TextBox runat="server" ID="BusIdStartTextBox" Width="2.5em" Height="13px" CssClass="rightAlignTextBox" />
    </FooterTemplate>
</asp:TemplateField>

問題: フォームのリンク (編集、削除) をクリックすると、すべての検証がトリガーされます。したがって、[編集] をクリックすると、[挿入] 行の検証 (「無効」が返されます) がトリガーされます。私はこれでそれを無効にすると思った:

<asp:LinkButton runat="server" ID="ActionEditLink" CommandName="Edit" Text="Edit" OnClientClick="DeactivateValidation()" />

...

function DeactivateValidation() {
    TryDispose('EditBusIdStartTextBoxBehavior');
    TryDispose('FooterBusIdStartTextBoxBehavior');
    //etc.
}

function TryDispose(behaviorId) {
    var behavior = window.$find(behaviorId);
    if (behavior != null)
        behavior.dispose();
}

ただし、検証はその後もアクティブであり、リンクをブロックします。クライアント側で検証を実際に無効にするにはどうすればよいですか?

4

1 に答える 1

0

これを行う方法は、それを使用CausesValidationして False に設定することです。

<asp:LinkButton runat="server" ID="ActionEditLink" CommandName="Edit" Text="Edit" CausesValidation="False" />
<asp:LinkButton runat="server" ID="ActionCancelLink" CommandName="Cancel" Text="Cancel" CausesValidation="False" />
于 2014-04-14T18:33:04.480 に答える