+1-888-365-2779
Try Now
More in this section

Forums / Ecommerce / CustomValidator for AddToCart not working

CustomValidator for AddToCart not working

6 posts, 0 answered
  1. Tim
    Tim  avatar
    34 posts
    Registered:
    16 Oct 2012
    04 Jun 2013
    Link to this post
    I need to do special validation on the product quantity before adding it to the shopping cart.

    1. I mapped the AddToCartWidget to use my external template.

    2. I add a CustomValidator to the Quantity field:
    <asp:CustomValidator ID="CustomValidator1" runat="server"
        OnServerValidate="CaseValidate"
        ValidationGroup="addToCart"
        ControlToValidate="quantity"
        Type="Integer"
        Display="Dynamic"
        ErrorMessage="Must order in multiples of case pack.">
    </asp:CustomValidator>

    3. My validation function gets called ok, I set args.IsValid = false, but the product is added to the cart, anyway.

    Will a <asp:CustomValidator work here, or do I need another approach ?

    Thanks much,
    Tim




  2. Patrick Dunn
    Patrick Dunn avatar
    237 posts
    Registered:
    03 Nov 2014
    06 Jun 2013
    Link to this post
    Hi Tim,

     Thank you for using Sitefinity.

    What kind of validation are you trying to accomplish?

    There is already a quantity and range validator available in the template.

    <asp:RequiredFieldValidator ID="quantityRequiredFieldValidator" runat="server"
                    ControlToValidate="quantity"
                    ValidationGroup="addToCart"
                    Display="Dynamic"
                    CssClass="sfErrorWrp">
                    <span class="sfError">
                        <asp:Literal runat="server" ID="lProductQuantityIsRequired" Text="<%$Resources:OrdersResources, ProductQuantityIsRequired %>"
     
    /></span>
                </asp:RequiredFieldValidator>
                <asp:RangeValidator ID="quantityValidator" runat="server"
                    MinimumValue="1"
                    MaximumValue="9999"
                    ControlToValidate="quantity"
                    ValidationGroup="addToCart"
                    Type="Integer"
                    Display="Dynamic"
                    CssClass="sfErrorWrp">
                    <span class="sfError">
                        <asp:Literal runat="server" ID="lProductQuantityIsInvalid" Text="<%$Resources: OrdersResources, ProductQuantityIsInvalid %>"
     
    /></span>

    If you can let me know I can point you to which asp validation control is best for your situation.

    Regards,
    Patrick Dunn
    Telerik
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. Tim
    Tim  avatar
    34 posts
    Registered:
    16 Oct 2012
    07 Jun 2013 in reply to Patrick Dunn
    Link to this post
    Hi Patrick,

    One example is "casepack" size  (you have to order in multiples of  12 (or whatever the number is... the casepack is a  custom fieled added to products)

    -tim
  4. Patrick Dunn
    Patrick Dunn avatar
    237 posts
    Registered:
    03 Nov 2014
    12 Jun 2013
    Link to this post
    Hello Tim,

    I hope you're well today.

    Here's my add to cart with a custom validator that checks if the quantity is 2.

    <%@ Control Language="C#" %>
    <%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
    <asp:UpdatePanel ID="UpdatePanel" runat="server">
        <ContentTemplate>
            <sf:Message runat="server" ID="addedToCartMessage" CssClass="sfMessage sfTopMsg" RemoveAfter="10000" />
            <div id="addToCartWidgetWrp" runat="server">
                <asp:Label ID="quantityLabel" runat="server" Text='<%$Resources:OrdersResources, QuantityColon %>' AssociatedControlID="quantity"
     
    CssClass="sfTxtLbl" />
                <asp:RequiredFieldValidator ID="quantityRequiredFieldValidator" runat="server"
                    ControlToValidate="quantity"
                    ValidationGroup="addToCart"
                    Display="Dynamic"
                    CssClass="sfErrorWrp">
                    <span class="sfError">
                        <asp:Literal runat="server" ID="lProductQuantityIsRequired" Text="<%$Resources:OrdersResources, ProductQuantityIsRequired %>"
     
    /></span>
                </asp:RequiredFieldValidator>
                <asp:RangeValidator ID="quantityValidator" runat="server"
                    MinimumValue="1"
                    MaximumValue="9999"
                    ControlToValidate="quantity"
                    ValidationGroup="addToCart"
                    Type="Integer"
                    Display="Dynamic"
                    CssClass="sfErrorWrp">
          
                    <span class="sfError">
                        <asp:Literal runat="server" ID="lProductQuantityIsInvalid" Text="<%$Resources: OrdersResources, ProductQuantityIsInvalid %>" /></span>
                </asp:RangeValidator>
                                 
                <asp:CustomValidator ID="custom" runat="server"
                    ControlToValidate="quantity" ClientValidationFunction="validateQuantity"
                    ErrorMessage="Failed validation" ValidationGroup="addToCart" Display="Dynamic"   />
     
     
                <asp:TextBox ID="quantity" runat="server" CssClass="sfTxt sfQuantity" CausesValidation="true" ValidationGroup="addToCart" />
                <asp:Button ID="addToCartButton" runat="server" Text='<%$Resources:OrdersResources, AddToCart %>' ValidationGroup="addToCart" CssClass="sfAddToCartBtn" />
     
       </div>
                <script>
                    function validateQuantity(sender, args) {
                        if (args.Value == 2) {
                            alert("TEST");
                            args.IsValid = false;
                        }
                        else {
                            args.IsValid = true;
                        }
                    }
            </script>
        </ContentTemplate>
    </asp:UpdatePanel>

    It works as you can see the video here:

    http://screencast.com/t/LQmpPYg31x
    Regards,
    Patrick Dunn
    Telerik
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  5. Tim
    Tim  avatar
    34 posts
    Registered:
    16 Oct 2012
    12 Jun 2013 in reply to Patrick Dunn
    Link to this post
    Thanks Patrick, that helps.

    ServerSide validation would have been better, but I can probably live with it.

    Is there any trick to getting access to other product custom variables  that I need to do the validation calculation (for example I need casePack for this particular example)  

    Just  make hidden fields for all of the things I need ? 

    Thanks again for your help!
    -Tim
  6. Patrick Dunn
    Patrick Dunn avatar
    237 posts
    Registered:
    03 Nov 2014
    13 Jun 2013
    Link to this post
    Hi Tim,

     Hidden fields would be the best way to go about it with client validation, yes, or grab the control that they already have values loaded in and do the validation that way.

    Regards,
    Patrick Dunn
    Telerik
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
6 posts, 0 answered