سؤال

اعتقدت أن ما كنت أحاول فعله كان تافهاً إلى حد ما ، لكن اتضح أن تزعجني بشكل كبير. ها هو الوضع.

لديّ زران لراديو (تم تنفيذه باستخدام Radbutton) و RadtextBox. أرغب في التحقق من العميل ، قبل إرسال النموذج الذي لا يفرغ فيه Radtextbox عند تحديد أحد زرين الراديو (دعنا نقول الأول). لقد استخدمت CustomValidator وقد قمت بتعيين ValueTaPtytext = "TRUE" بلا حظ. مستخلص الرمز أدناه:

<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>

JavaScript أدناه:

<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>
هل كانت مفيدة؟

المحلول

بعد قضاء بعض الوقت لتنخفض هذه المشكلة ، تمكنت من العثور على السبب الجذري للمشكلة.

ترتبط المشكلة بوضع التحقق من صحة غير مزعج جديد .NET 4.5. لكي يعمل هذا بشكل صحيح JQuery 2.0. هذا هو المعيار في .NET 4.5. ومع ذلك ، فإن إصدار jQuery المدمج في Radcontrols (حتى الإصدار على الأقل 2013q3) ، هو v1.9.1 (انظر هنا). نتيجة لذلك CustomValidator لا يعمل بشكل صحيح بعد الآن.

هناك بديلان لهذا - لقد جربت أول واحد فقط مع النجاح:

  1. تعطيل وضع التحقق من الصحة غير مزعجة. للقيام بذلك ، تحتاج إلى تضمين السطر التالي في <appSettings> قسم من web.config ملف:

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

    الجانب السلبي: تم تصميم وضع التحقق من الصحة غير المزعجة لجعل SE من ميزات HTML5 الجديدة من أجل القضاء على رمز JavaScript الذي تم إنشاؤه من أجل إجراء عمليات التحقق ، مما يؤدي إلى صفحات أخف (انظر هنا). من خلال تعطيلها ، أنت لا تستفيد من هذه الميزة.

  2. اختر عدم استخدام الإصدار المدمج من jQuery لـ Radcontrols (أي v1.9.1) واستخدم الإصدار المقدم بواسطة .NET 4.5 (أي v2.0).

    الجانب السلبي: المشكلة هنا هي أنه تم اختبار Radcontrols باستخدام النسخة المدمجة من jQuery وقد تواجه مشاكل. من أجل تعطيل النسخة المدمجة من jQuery يرجى الرجوع إلى هذا الرابط

آمل أن يساعد هذا الشخص القادم الذي سيتعثر على هذه المشكلة نفسها.

نصائح أخرى

تحتاج إلى الاتصال يدويًا بوظيفة ValitatorValidate وتمرير مثيل المدقق المخصص من داخل RDBTNPhysical_CheckedChanged ومعالجات RDBTnlegal_CheckedCheged. لقد قمت بإعداد مثال قصير لك أدناه:

  <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>

لقد اختبرت للتو الرمز ويبدو أنه يعمل بشكل جيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top