Frage

Ich dachte, dass das, was ich versuchte, ziemlich trivial sei, aber es stellt sich heraus, dass es mich erheblich beunruhigt. Hier ist die Situation.

Ich habe zwei Optionsfelder (mit Radbutton implementiert) und eine Radtextbox. Ich möchte den Client überprüfen, bevor ich das Formular einreiche, dass die Radtextbox nicht leer ist, wenn eine der beiden Optionsfelder ausgewählt ist (sagen wir den ersten). Ich habe den CustomValidator verwendet und validateEmptyText = "true" zu keinem Glück festgelegt. Der Auszug des Codes ist unten:

<asp:Panel runat="server" ID="Panel1">
<table>
    <tr>
        <td class="auto-style5">
            <telerik:RadButton ID="rdBtnIndividual" runat="server" AutoPostBack="False" GroupName="rdEmplrType" 
                Text="Individual" ToggleType="Radio" OnClientCheckedChanged="rdBtnPhysical_CheckedChanged" 
                UseSubmitBehavior="False">
                <ToggleStates>
                    <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleRadioChecked" />
                    <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleRadio" />
                </ToggleStates>
            </telerik:RadButton>
        </td>
        <td>
            <telerik:RadButton ID="rdBtnLegal" runat="server" AutoPostBack="False" GroupName="rdEmplrType" Text="Legal Entity" 
                ToggleType="Radio" OnClientCheckedChanged="rdBtnLegal_CheckedChanged" UseSubmitBehavior="False">
                <ToggleStates>
                    <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleRadioChecked" />
                    <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleRadio" />
                </ToggleStates>
            </telerik:RadButton>
        </td>
    </tr>
    <tr>
        <td class="auto-style5">
            <label>Name:</label>
        </td>
        <td>
            <telerik:RadTextBox ID="txtName" Runat="server" EmptyMessage="Name" LabelWidth="64px" Resize="None" Width="160px" DisabledStyle-BackColor="Silver">
            </telerik:RadTextBox>
        </td>
        <td><asp:RequiredFieldValidator ID="THIS_IS_WORKING" ControlToValidate="txtName"
                runat="server" ErrorMessage="<img src='images/Exclamation.png' Title='Required Field'/>" >
            </asp:RequiredFieldValidator>
        </td>
    </tr>
    <tr>
        <td class="auto-style5">
            <label>Father's Name</label>
        </td>
        <td style="width:100px">
            <telerik:RadTextBox ID="txtFathersName" Runat="server" EmptyMessage="Father's Name" LabelWidth="64px" Resize="None" Width="160px" DisabledStyle-BackColor="Silver">
            </telerik:RadTextBox>
        </td>
        <td>
            <asp:CustomValidator runat="server" ID="NOT_WORKING_VALIDATOR" ControlToValidate="txtFathersName" ValidateEmptyText="True"
                ClientValidationFunction="RequiredIfIndividual"
                ErrorMessage="<img src='images/Exclamation.png' Title='Required Field'/>" EnableClientScript="True">
            </asp:CustomValidator>

        </td>
    </tr>
</table>
</asp:Panel>

Das JavaScript ist unten:

<script type="text/javascript">
    function RequiredIfIndividual(sender, args) {
        var chkBoxIndividual = $find("<%=rdBtnIndividual.ClientID%>");
        chkBoxIndividual = $telerik.toButton(chkBoxIndividual);
        if (chkBoxIndividual.get_checked()) {
            if (args.Value == "") {
                args.IsValid = false;
            }
            else {
                args.IsValid = true;
            }
        } else {
            args.IsValid = true;
        }
    }

</script>
War es hilfreich?

Lösung

Nachdem ich einige Zeit damit verbracht hatte, dieses Problem niederzulegen, gelang es mir, die Grundursache des Problems zu finden.

Das Problem bezieht sich auf den neuen unauffälligen Validierungsmodus von .NET 4.5. Damit dies ordnungsgemäß funktioniert, ist JQuery 2.0 erforderlich. Dies ist Standard in .NET 4.5. Die eingebettete JQuery -Version in Radcontrols (bis zu mindestens Version 2013Q3) ist jedoch v1.9.1 (siehe hier). Infolgedessen die CustomValidator Funktioniert nicht mehr richtig.

Es gibt zwei Alternativen dazu - ich habe nur den ersten mit Erfolg ausprobiert:

  1. Deaktivieren Sie den unauffälligen Validierungsmodus. Dazu müssen Sie die folgende Zeile in die aufnehmen <appSettings> Abschnitt der web.config Datei:

    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />

    Der Nachteil: Der unauffällige Validierungsmodus ist so konzipiert, dass neue HTML5 -Funktionen SE erstellt werden, um den JavaScript -Code zu beseitigen, der generiert ist, um die Validierungen durchzuführen, was zu leichteren Seiten führt (siehe hier). Durch Deaktivieren verwenden Sie diese Funktion nicht.

  2. Verwenden Sie die eingebettete Version von JQuery nicht für Radcontrols (dh v1.9.1) und verwenden Sie die von .NET 4.5 (dh v2.0) bereitgestellte.

    Der Nachteil: Das Problem ist hier, dass Radcontrols mit der eingebetteten Version von JQuery getestet wurden und Sie möglicherweise auf Probleme stoßen. Um die eingebettete Version von JQuery zu deaktivieren dieser Link

Ich hoffe, dies hilft der nächsten Person, die über das gleiche Problem stolpert.

Andere Tipps

Sie müssen die Funktion validatorValidate manuell aufrufen und die benutzerdefinierte Validator -Instanz innerhalb des RDBTNPhysical_CheckedChanged und der RDBTNLEGAL_CheckedChanged -Handler übergeben. Ich habe unten ein kurzes Beispiel für Sie vorbereitet:

  <script type="text/javascript">
            function RequiredIfIndividual(sender, args) {
                var chkBoxIndividual = $find("<%=rdBtnIndividual.ClientID%>");
                chkBoxIndividual = $telerik.toButton(chkBoxIndividual);
                if (chkBoxIndividual.get_checked()) {
                    if (args.Value == "") {
                        args.IsValid = false;
                    }
                    else {
                        args.IsValid = true;
                    }
                } else {
                    args.IsValid = true;
                }
            }

            function rdBtnPhysical_CheckedChanged(sender, args) {
                ValidatorValidate($get("NOT_WORKING_VALIDATOR"));
            }

            function rdBtnLegal_CheckedChanged(sender, args) {
                ValidatorValidate($get("NOT_WORKING_VALIDATOR"));
            }

        </script>

Ich habe gerade den Code getestet und es scheint gut zu funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top