ValidatorCalloutExtender and RadNumericTextBox issue

12 posts, 1 answers
  1. Peter
    Peter avatar
    3 posts
    Member since:
    Oct 2008

    Posted 30 Oct 2008 Link to this post

    Hi, I hope someone can help me with the following issue - It seems like there is a problem with the javascript when using the RadNumericTextBox with a ValidatorCalloutExtender.

    It seems like the problem is caused when page tries to dispose of the CalloutValidator.

    To reproduce the issue, slap a simple webform together that looks something like this:
            <telerik:RadScriptManager runat="server" ID="rsm"></telerik:RadScriptManager> 
            <telerik:RadNumericTextBox ID="txtAmount" Runat="server"></telerik:RadNumericTextBox> 
            <asp:RangeValidator runat="server" id="rv1" MinimumValue=0 MaximumValue=1 ControlToValidate="txtAmount" ErrorMessage="Please fix"></asp:RangeValidator> 
            <ajaxControlToolkit:ValidatorCalloutExtender runat="Server" ID="vcerv1" TargetControlID="rv1" /> 
            <asp:Button runat="server" Text="Save" ID="btnSave"  /> 
            
    Now, run it and enter an invalid value in the txtAmount textbox to get the CalloutExtender to pop up. Now press F5 - I get a "'_events' is null or not an object" javascript exception. Looking at the stack trace - this seems to stem from some cleanup method called by the browser on page unload. 

    Am I doing something wrong, or is this a known issue - I had a look at the existing posts in the forum and couldn't find anything about this issue.

    Thank you,
    Peter

    AjaxControlToolkit.dll : v3.0.20820.16598
    Telerik.Web.UI.dll : v2008.2.1001.35
  2. Answer
    Plamen Peshev
    Admin
    Plamen Peshev avatar
    886 posts

    Posted 03 Nov 2008 Link to this post

    Hi Peter,

    Indeed there is such issue with the current official version of RadNumericTextBox - we apologize for the inconvenience. You may be happy to know that the problem is addressed in the Q3 2008 which will be live on our site by the end of this week.


    Regards,
    Plamen
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Peter
    Peter avatar
    3 posts
    Member since:
    Oct 2008

    Posted 03 Nov 2008 Link to this post

    Thank you, I'll be sure to download 2008 Q3 when it gets released.

    Cheers,
    Peter
  5. towpse
    towpse avatar
    224 posts
    Member since:
    Mar 2008

    Posted 02 Jun 2009 Link to this post

    Guys. Hope someone can help.

    I'm still seeing this issue but in a different spot. I get that same null a._events javascript error when I close my browser down.

    I'm using an input manager with two input settings defined, both with initializeOnClient = true.
    I'm finding if I take out the initializeOnClient attribute on one of my input settings I don't get the error.

    I had some code that loads input controls into the manager but I commented out everything to do with the manager expect for the declaration in markup. I even removed all attributes eventually seeing that one initializeOnClient attribute in the manager was fine and having two caused that error.

    The error is breaking in
    MicrosoftAjax.js 

    Right now I'm thinking of trying to declare two input managers with a single input setting each to see if that works.

    Any thoughts?

    Here's my InputManager markup, It's quite standard I would think.
          <%-- The following TextBox is required by the InputManager --%>  
        <asp:TextBox ID="TextBox1" runat="server"  style="display:none" />  
        <telerik:RadInputManager  ID="RadInputManager" runat="server" Skin="Vista"
            <telerik:NumericTextBoxSetting BehaviorID="NumericSettings" InitializeOnClient="true" Type="Number" DecimalDigits="1" GroupSizes="3" GroupSeparator="," PositivePattern="n" NegativePattern="-n">  
                <TargetControls> 
                    <telerik:TargetInput ControlID="TextBox1" /> 
                </TargetControls> 
            </telerik:NumericTextBoxSetting> 
            <telerik:TextBoxSetting BehaviorID="TextSettings" InitializeOnClient="true"  > 
                <TargetControls> 
                    <telerik:TargetInput ControlID="TextBox1" /> 
                </TargetControls> 
            </telerik:TextBoxSetting> 
        </telerik:RadInputManager> 


    Update:
    It may be that I use the same dummy text box for both input settings. If I use a different one, it seems to have solved the issue. I'm going to test some more. Let me know if that makes sense to you telerik folks. Thanks.



    AjaxControlToolkit 3.0.20229.20843
    Telerik.Web.UI 2008.3.1314.35
  6. Pavel
    Admin
    Pavel avatar
    904 posts

    Posted 05 Jun 2009 Link to this post

    Hi Matt,

    Can you try upgrading to the latest version of the controls (2009 Q1 527) and let us know if the problem persists. You can read more on how to upgrade in this Knowledge Base article.

    Greetings,
    Pavel
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
  7. Thomas
    Thomas avatar
    3 posts
    Member since:
    Jun 2008

    Posted 22 Sep 2009 Link to this post

    Pavel,

     

    Can you guys add this functionality to RadTooltip so that we can use RadTooltips instead of CalloutExtenders?  It would be very excellent and a good enhancement to RadTooltip.

     

    Thanks,

    Tommy

  8. Sebastian
    Admin
    Sebastian avatar
    9934 posts

    Posted 22 Sep 2009 Link to this post

    Hi Tommy,

    How to integrate RadToolTip to display errors when the RadInput validation fails you can see from the sample available in this blog post on our site.

    Best regards,
    Sebastian
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
  9. lkj lkj
    lkj lkj avatar
    12 posts
    Member since:
    Jan 2010

    Posted 17 Feb 2010 Link to this post

    Im on 2009 q3 and still have _events is null or not an object. Whenever the validatorCalloutExtender fires.. Are you planning to fix it?
  10. Pavel
    Admin
    Pavel avatar
    904 posts

    Posted 18 Feb 2010 Link to this post

    Hello,

    Can you provide more details about your scenario, as I cannot reproduce the error?

    Sincerely yours,
    Pavel
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  11. Veli
    Admin
    Veli avatar
    2002 posts

    Posted 15 Mar 2010 Link to this post

    Hi guys,

    This issue, as it turned out, is not related to RadInput controls or any of  the Telerik AJAX controls. The exception you are getting originates from a failing method in the ValidationCalloutExtender, and more specifically, from the PopupBehavior object that is used internally by the callout.

    What happens is that PopupBehavior attaches event handlers to all the parent containers of the component's container element and tries to remove the event handlers when the object is disposed. The control does not, however, check if the event handlers have already been removed. As a result, if the handler that is tried to be removed is already gone (as happens when the element is a container of another script control, as components usually clear their container's event handlers themselves), you get the exception under discussion.

    This issue can be observed using a very simple setup:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Panel runat="server" ID="pnlTest">
                <ajax:ValidatorCalloutExtender ID="vceFName" runat="server" Enabled="True" TargetControlID="rfvFName" />
                <asp:TextBox ID="txtFName" runat="server" />
                <asp:RequiredFieldValidator ID="rfvFName" runat="server" ControlToValidate="txtFName"
                    Display="None" ErrorMessage="First Name is Required" SetFocusOnError="True" />
                <br />
                <asp:Button runat="server" ID="Button2" Text="Validate" />
                <asp:Button runat="server" ID="Button3" Text="Cancel" CausesValidation="false" OnClientClick="$get('form1')._events = null;" />
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>


    In the above markup, clicking the Cancel button will simulate the exception you are getting, as the _events object has been manually removed by the time the dispose method of the PopupBehavior is called.

    To fix this issue, you will need to modify the dispose method of the PopupBehavior object from the AjaxControlToolkit to the following:

    AjaxControlToolkit.PopupBehavior.prototype.dispose = function()
    {
        /// <summary>
        /// Dispose the PopupBehavior
        /// </summary>
        var element = this.get_element();
        if (element)
        {
            if (this._visible)
            {
                this.hide();
            }
            if (this._originalParent)
            {
                element.parentNode.removeChild(element);
                this._originalParent.appendChild(element);
                this._originalParent = null;
            }
            // Remove expando properties
            element._hideWindowedElementsIFrame = null;
        }
        this._parentElement = null;
        // Remove the animation ended events and wipe the animations
        // (we don't need to dispose them because that will happen
        // automatically in our base dispose)
        if (this._onShow && this._onShow.get_animation() && this._onShowEndedHandler)
        {
            this._onShow.get_animation().remove_ended(this._onShowEndedHandler);
        }
        this._onShowEndedHandler = null;
        this._onShow = null;
        if (this._onHide && this._onHide.get_animation() && this._onHideEndedHandler)
        {
            this._onHide.get_animation().remove_ended(this._onHideEndedHandler);
        }
        this._onHideEndedHandler = null;
        this._onHide = null;
        if (this._onParentRepositionHandler != null)
        {
            $removeHandler(window, 'resize', this._onParentRepositionHandler);
        }
        if (this._elementsWithAttachedRepositionHandlers != null)
        {
            for (var i = 0; i < this._elementsWithAttachedRepositionHandlers.length; i++)
            {
                if (this._elementsWithAttachedRepositionHandlers[i]._event)
                {
                    $removeHandler(this._elementsWithAttachedRepositionHandlers[i], 'resize', this._onParentRepositionHandler);
                    $removeHandler(this._elementsWithAttachedRepositionHandlers[i], 'scroll', this._onParentRepositionHandler);
                }
            }
            this._elementsWithAttachedRepositionHandlers = null;
        }
        this._onParentRepositionHandler = null;
        AjaxControlToolkit.PopupBehavior.callBaseMethod(this, 'dispose');
    }


    Above is the overriden dispose method of the PopupBehavior, where a check has been included (the marked if statement) before removing the event handlers. You need to either modify the debug and release versions of PopupBehavior.js from the control toolkit project and rebuild the toolkit from source, or use this script in every page you use callout extenders and any kind of popups from the AJAX toolkit.


    Best,
    Veli
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  12. Deepak Saboji
    Deepak Saboji avatar
    14 posts
    Member since:
    Feb 2010

    Posted 01 Sep 2010 Link to this post

    Hello,
    I am also facing the same problem of  "_events is null or not an object".
    The scenario is -  i am having a modelpopupextender . On that i am having a button to search some records and option to save and cancel.
    I click the search button and then after performing some operations click cancel or save  button , the popup hides and the appropriate action takes place.
    but when i refresh the page or click the save button on parent page ,  this error occurs.
    The error comes only in a scenario when i click search button.
    otherwise the application works fine.
    i was reading the solution given above but how will it be possible for me to change the ajaxcontroltoolkit function?
    can you people suggest some ideas for it?
    is it possible to write something in my code to achieve the same?



    Yours sincerely,

    Thanks and regards
  13. Dimo
    Admin
    Dimo avatar
    8330 posts

    Posted 01 Sep 2010 Link to this post

    Hello Deepak,

    A Javascript function from any library (such as the AjaxControlToolkit) can be overridden if you redefine a different function with the same name after the original function has been parsed. In other words, if you paste the Javascript code in the <body> of the page, you will override the toolkit scripts. You need to include or register the code in the <body> in order to ensure that it is parsed after the original code, which is inside the <head>.

    Regards,
    Dimo
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017