zoukankan      html  css  js  c++  java
  • 关于DEV Express 一些控件的使用。 (异步刷新, AJAX的使用)

    Dev Express 控件对于异步刷新和异步调用有很好的封装。具体的详细分析见下次文档。这篇文档主要是代码的使用:有前段和后端。

    JS代码部分:

    var step = 1;
    var CCTypeEnum = {
        Visa: 0,
        MasterCard: 1,
        Discover_Novus: 2,
        Amex: 3
    }
    var _ccTypeEnum;
    var _planId;
    
    function openPurchaseWizard(Id) {
        step = 1;
        _planId = Id;
        ClearAllFields();
        initPlanInfo.PerformCallback(JSON.stringify({
            planId: Id.toString()
        }));
        SetStepVisibility();
    }
    
    function ClearAllFields() {
        _ccTypeEnum = null;
        var result = document.getElementById("cbAgree");
        result.checked = false;
        txtCardNumber.SetText("");
        cmbExpMonth.SetText("");
        cmbExpYear.SetText("");   
    }
    function initPlanInfoCallBack_CallbackComplete(s, e) {
        purchasePlanWizardLightbox.Show();
    }
    
    function PurchasePlanWizardTopCloseButton_Click(s, e) {
        document.getElementById('PurchasePlanClose_Contents').innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_CloseWizard");
        purchasePlanCloseMsg.Show();
        document.body.style.overflow = "auto";
        document.documentElement.style.overflow = 'auto';
    }
    function PurchasePlanPrintButton_Click(s, e) {
        document.getElementById('PurchasePlanPrintIframe').focus();
        document.getElementById('PurchasePlanPrintIframe').contentWindow.focus();
        document.getElementById('PurchasePlanPrintIframe').contentWindow.print();
    }
    
    function PurchasePlanNextButton_Click(s, e) {
        if (step == 1) {
            var result = document.getElementById("cbAgree");
            if (!result.checked) {
                document.getElementById('PurchasePlanAlert_Contents').innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_CheckAgreeAlert");
                purchasePlanSlideOutMsg.Show();
                return;        }
        }
        if (step == 2) {
            if (hasBlankField() || (!ValidateField())) {
                document.getElementById('PurchasePlanAlert_Contents').innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_IsRequiredFields");
                purchasePlanSlideOutMsg.Show();         
                return;            
                    }  
            var cardNumber = txtCardNumber.GetText();
    
            for (var i = 0; i < cardNumber.length - 4; i++) {
                cardNumber=cardNumber.replace(cardNumber[i].toString(), '');
            }
        document.getElementById("txtConfirmCardNumber").innerHTML = cardNumber;
            document.getElementById("txtConfirmExpDate").innerHTML = cmbExpMonth.GetValue() + "/" + cmbExpYear.GetValue(); ;
            document.getElementById("txtConfirmBillingZip").innerHTML = txtPostalCode.GetText();
           
        }
        step++;
        SetStepVisibility();
    }
    
    function SetStepVisibility() {
        switch (step) {
            case 1:
                document.getElementById("PurchasePlanTitle").innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlan_ReviewTermsConditions");
                break;
            case 2:
                document.getElementById("PurchasePlanTitle").innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlan_TitleEnterBillingInformation");
                break;
            case 3:
                document.getElementById("PurchasePlanTitle").innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlan_TitleReviewAndConfirmPurchase");
                break;
        }    
        document.getElementById("ReviewTermsDiv").style.visibility = step == 1 ? "visible" : "hidden";
        document.getElementById("ReviewTermsDiv").style.display = step == 1 ? "" : "none";
        document.getElementById("ReviewTermsDivFooter").style.visibility = step == 1 ? "visible" : "hidden";
        document.getElementById("ReviewTermsDivFooter").style.display = step == 1 ? "" : "none";
        document.getElementById("EnterBillingInfoDiv").style.visibility = step == 2 ? "visible" : "hidden";
        document.getElementById("EnterBillingInfoDiv").style.display = step == 2 ? "" : "none";
        document.getElementById("ConfirmPurchaseDiv").style.visibility = step == 3 ? "visible" : "hidden";
        document.getElementById("ConfirmPurchaseDiv").style.display = step == 3 ? "" : "none";
        PurchasePlanWizardPreviousButton.SetVisible(step > 1 && step < 4);
        document.getElementById("ReviewTermsStepDiv").className = document.getElementById("ReviewTermsStepDiv").className.
            replace("purchase-plan-step-div" + (step == 1 ? "" : "-current"), "purchase-plan-step-div" + (step == 1 ? "-current" : ""));
        document.getElementById("EnterBillingInfoStepDiv").className = document.getElementById("EnterBillingInfoStepDiv").className.
            replace("purchase-plan-step-div" + (step == 2 ? "" : "-current"), "purchase-plan-step-div" + (step == 2 ? "-current" : ""));
        document.getElementById("ConfirmPurchaseStepDiv").className = document.getElementById("ConfirmPurchaseStepDiv").className.
            replace("purchase-plan-step-div" + (step == 3 ? "" : "-current"), "purchase-plan-step-div" + (step == 3 ? "-current" : ""));
        document.getElementById("ReviewTermsIconDiv").className = step == 1 ? "purchase-plan-step-icon" : "purchase-plan-step-icon-inactive";
        document.getElementById("EnterBillingInfoIconDiv").className = step == 2 ? "purchase-plan-step-icon" : "purchase-plan-step-icon-inactive";
        document.getElementById("ConfirmPurchaseIconDiv").className = step == 3 ? "purchase-plan-step-icon" : "purchase-plan-step-icon-inactive";
        PurchasePlanWizardNextButton.SetVisible(step < 3);
        PurchasePlanWizardConfirmButton.SetVisible(step == 3);
    }
    function PurchasePlanPreviousButton_Click(s, e) {
        step--;
        SetStepVisibility();
    }
    
    function CCTypeButton_Click(CCType) {
        switch (CCType) {
            case CCTypeEnum.Visa:
                document.getElementById("CCType_Visa").className = "purchase-plan-card-visa-select";
                document.getElementById("CCType_Mastercard").className = "purchase-plan-card-mastercard-unselect";
                document.getElementById("CCType_Discover").className = "purchase-plan-card-discover-unselect";
                document.getElementById("CCType_Amex").className = "purchase-plan-card-amex-unselect";
                _ccTypeEnum = CCTypeEnum.Visa;
                break;
            case CCTypeEnum.MasterCard:
                document.getElementById("CCType_Mastercard").className = "purchase-plan-card-mastercard-select";
                document.getElementById("CCType_Visa").className = "purchase-plan-card-visa-unselect";         
                document.getElementById("CCType_Discover").className = "purchase-plan-card-discover-unselect";
                document.getElementById("CCType_Amex").className = "purchase-plan-card-amex-unselect";
                _ccTypeEnum = CCTypeEnum.MasterCard;
                break;
            case CCTypeEnum.Discover_Novus:
                document.getElementById("CCType_Discover").className = "purchase-plan-card-discover-select";
                document.getElementById("CCType_Visa").className = "purchase-plan-card-visa-unselect";
                document.getElementById("CCType_Mastercard").className = "purchase-plan-card-mastercard-unselect"
                document.getElementById("CCType_Amex").className = "purchase-plan-card-amex-unselect";
                _ccTypeEnum = CCTypeEnum.Discover_Novus;
                break;
            case CCTypeEnum.Amex:
                document.getElementById("CCType_Amex").className = "purchase-plan-card-amex-select";
                document.getElementById("CCType_Visa").className = "purchase-plan-card-visa-unselect";
                document.getElementById("CCType_Mastercard").className = "purchase-plan-card-mastercard-unselect";
                document.getElementById("CCType_Discover").className = "purchase-plan-card-discover-unselect";
                _ccTypeEnum = CCTypeEnum.Amex;
                break;
    
        }
    }
    function OnCountryChanged(s) {
        cmbStateProvince.PerformCallback(s.GetValue());
    }
    
    function cmbStateProvince_EndCallBack(s, e) {
        cmbStateProvince.SetText("");
    }
    
    function hasBlankField() {
        var hasBlank = false;
        ImageAddress_ConInvalidCharacter.SetVisible(false);
        ImageCity_ConInvalidCharacter.SetVisible(false);
        ImageStateProvince_ConInvalidCharacter.SetVisible(false);
        ImageCountry_ConInvalidCharacter.SetVisible(false);
        ImagePostalCode_ConInvalidCharacter.SetVisible(false);
        ImageCardNummber_ConInvalidCharacter.SetVisible(false);
        ImageExpDate_Error.SetVisible(false);
        ImageCardType_Error.SetVisible(false);
    
        if (_ccTypeEnum == null) {
            ImageCardType_Error.SetVisible(true);
            hasBlank = true;
        }
        if (IsBlank(txtCardNumber, ImageCardNummber_Error)) {
            hasBlank = true;
        }
    
        if (ValidateExpDateBlank()) {
            hasBlank = true;
        }
    
        if (IsBlank(txtAddress, ImageAddress_ConError)) {
            hasBlank = true;
        }
        if (IsBlank(txtCity, ImageCity_ConError)) {
            hasBlank = true;
        }
        if (IsBlank(cmbStateProvince, ImageStateProvince_ConError)) {
            hasBlank = true;
        }
    
        if (IsBlank(cmbCountry, ImageCountry_ConError)) {
            hasBlank = true;
        }
    
        if (IsBlank(txtPostalCode, ImagePostalCode_ConError)) {
            hasBlank = true;
        }
        
        return hasBlank;
    }
    
    function IsBlank(instanceName, instanceErrorName) {
        if (Dyna.len(instanceName.GetText().Trim()) < 1) {
            instanceErrorName.SetVisible(true);
            return true;
        } else {
            instanceErrorName.SetVisible(false);
            return false;
        }
    }
    
    function ValidateField() {
        var valid = true;
        switch (_ccTypeEnum) {
            case CCTypeEnum.Visa:
                if (!validateVisaCard(txtCardNumber.GetText())) {
                    ImageCardNummber_ConInvalidCharacter.SetVisible(true);
                    valid = false;
                }
                break;
            case CCTypeEnum.MasterCard:
                if (!validateMasterCardCard(txtCardNumber.GetText())) {
                    ImageCardNummber_ConInvalidCharacter.SetVisible(true);
                    valid = false;
                }
                break;
            case CCTypeEnum.Discover_Novus:
                if (!validateDiscover_NovusCard(txtCardNumber.GetText())) {
                    ImageCardNummber_ConInvalidCharacter.SetVisible(true);
                    valid = false;
                }
                break;
            case CCTypeEnum.Amex:
                if (!validateAmexCard(txtCardNumber.GetText())) {
                    ImageCardNummber_ConInvalidCharacter.SetVisible(true);
                    valid = false;
                }
                break;
        }
        if (!ValidateExpDateField()) {
            valid = false;
            ImageExpDate_Error.SetVisible(true);
         }
        
        if (!validateAddress1(txtAddress.GetText())) {
            ImageAddress_ConInvalidCharacter.SetVisible(true);
            valid = false;
        }
        if (!validateCity(txtCity.GetText())) {
            ImageCity_ConInvalidCharacter.SetVisible(true);
            valid = false;
        }
        if (!validateZip(txtPostalCode.GetText())) {
            ImagePostalCode_ConInvalidCharacter.SetVisible(true);
            valid = false;
        }
        return valid;
    }
    function ValidateExpDateBlank() {
        if ((Dyna.len(cmbExpMonth.GetText().Trim()) < 1) || (Dyna.len(cmbExpYear.GetText().Trim()) < 1)) {
            ImageExpDate_ConError.SetVisible(true);
            return true;
        } else {
            ImageExpDate_ConError.SetVisible(false);
            return false;
        }
    }
    function ValidateExpDateField() {
        var valid = true;
        var month = cmbExpMonth.GetValue();
        var year = cmbExpYear.GetValue();
        var date = new Date()
        var nowYear = date.getFullYear();
        var nowMonth = date.getMonth()+1;
        if ((nowYear == year) && (month <= nowMonth)) {
                valid = false;
        }
        return valid;
    
    }
    function PurchasePlanConfirmButton_Click(s, e) {
    
        if ((IsBlank(txtEmailTo, ImageSentEmail_ConError))) {
            document.getElementById('PurchasePlanAlert_Contents').innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlan_EmailAddressIsARequiredField");
            purchasePlanSlideOutMsg.Show();
            return;
        }
        if (!validateEmailAddress(txtEmailTo.GetText())) {
            ImageSentEmail_ConInvalidCharacter.SetVisible(true);
            document.getElementById('PurchasePlanAlert_Contents').innerHTML = messageLanguagePurchasePlanWizard.Get("PurchasePlan_EmailAddressContainsInvalidCharacters");
            purchasePlanSlideOutMsg.Show();
            return;
        }
        SavePurchasePlanCallBack.PerformCallback(JSON.stringify({
            planId: _planId.toString()
        }));
    }
    function savePurchasePlan_CallbackComplete(s, e) {
        if (SavePurchasePlanCallBack.cpError) {
            ShowSimpleAlert(messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_Error"),
            messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_AnErrorOccurred"));
            return;
        }
        if (SavePurchasePlanCallBack.cpFlag) {
            //Call Salesforce to convert lead
            Dyna.Net.callMethod({
                ok: convertLeadSuccess,
                fail: convertLeadFail,
                type: 'Domain.Services.PartnerService',
                method: 'PartnerSalesForceConvertLead',
                args: [
                    { name: 'username', value: SavePurchasePlanCallBack.cpUsername }
                    ]
            });
            window.location.href = "../home/Home.aspx";
        }
        else {
    
            ShowSimpleAlert(messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_Error"),
            messageLanguagePurchasePlanWizard.Get("PurchasePlanWizardJS_AnErrorOccurred"));
        }
    
    }
    
    function convertLeadSuccess() {
        //return true;
    }
    function convertLeadFail() {
        //return false;
    }

    主要的HTML代码部分:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PurchasePlanWizardForm.ascx.cs" Inherits="WebPortalApplication.App_Components.Forms.PurchasePlanWizardForm" %>
    <%@ Register TagPrefix="intronis" TagName="PurchasePlanWizardCloseLightbox" Src="~/App_Components/LightBox/PurchasePlanWizardCloseLightbox.ascx" %>
    <%@ Register TagPrefix="intronis" TagName="PurchasePlanSlideOutLightbox" Src="~/App_Components/LightBox/PurchasePlanSlideOutLightbox.ascx" %>
    <%@ Register TagPrefix="intronis" TagName="ImageButton" Src="~/App_Components/Buttons/ImageButton.ascx" %>
    
        <div id="purchasePlanWizardDiv"></div>
        <div class="purchase-plan-div">
            <div class="purchase-plan-title" id="PurchasePlanTitle" clientidmode="Static">
            </div>
            <div class="lbHeaderClosePanel purchase-plan-close" 
                onclick="PurchasePlanWizardTopCloseButton_Click()" title=""></div>
            
            <div class="purchase-plan-step-left">
                <div id="ConfirmPurchaseStepDiv" class="purchase-plan-step-float purchase-plan-step-div" style="margin-right:-23px;">
                    <div id="ConfirmPurchaseIconDiv" class="purchase-plan-step-icon-inactive">
                    </div>
                    <div class="purchase-plan-step-text confirm-purchase-title-div"><asp:Localize ID="Localize4" Text="<%$resources:Language,PurchasePlan_ConfirmPurchase%>" runat="server"/></div>
                </div>
                <div id="EnterBillingInfoStepDiv" class="purchase-plan-step-float purchase-plan-step-div" style="margin-right:-27px;">
                    <div id="EnterBillingInfoIconDiv" class="purchase-plan-step-icon-inactive">
                    </div>
                    <div class="purchase-plan-step-text enter-billingInfo-title-div"><asp:Localize ID="Localize3" Text="<%$resources:Language,PurchasePlan_EnterBillingInfo%>" runat="server"/></div>
                </div>
                <div id="ReviewTermsStepDiv" class="purchase-plan-step-float purchase-plan-step-div-current" style="margin-right:-16px;">
                    <div id="ReviewTermsIconDiv" class="purchase-plan-step-icon">
                    </div>
                    <div class="purchase-plan-step-text reviewterms-title-div"><asp:Localize ID="Localize2" Text="<%$resources:Language,PurchasePlan_ReviewTerms%>" runat="server"/> </div>
                </div>
            </div>
            <br />
            <div class="purchase-plan-line"></div> 
            <dxcp:ASPxCallbackPanel ID="InitPlanInfo" runat="server" SkinID="NoLoading"
                    HideContentOnCallback="False"
                    ClientInstanceName="initPlanInfo"
                    OnCallback="InitPlanInfoCallBack_Callback">
                <ClientSideEvents EndCallback="initPlanInfoCallBack_CallbackComplete" />  
                    <PanelCollection>
                        <dxp:PanelContent>
                        <dxhf:ASPxHiddenField ID="OriginalBillingAddressHiddenField" runat="server" ClientInstanceName="OriginalBillingAddressHiddenField" />     
            <div id="ReviewTermsDiv" class="purchase-plan-reviewterms" runat="server" clientidmode="Static">  
                <div id="ReviewTermsContentDiv" >
                    <div class="plan-summary">
                        <asp:Localize ID="PlanSummary" runat="server"/>
                    </div>
                    <div style=" margin-top:10px;">
                        <span class="plan-summary"><asp:Localize ID="Localize1" Text="<%$resources:Language,PurchasePlan_OnlineBackupPlan%>" runat="server"/></span>
                        <span class="plan-detail"> <asp:Localize  ID="OnlineBackupPlan" runat="server" /></span>
                    </div>
                    <div>
                        <span class="plan-summary"><asp:Localize ID="Localize6" Text="<%$resources:Language,PurchasePlan_EffectiveDate%>" runat="server"/></span>
                        <span class="plan-detail"><asp:Localize ID="EffectiveDate" runat="server"/></span>
                    </div>
                    <div>
                        <span class="plan-summary"><asp:Localize ID="Localize8" Text="<%$resources:Language,PurchasePlan_PaymentSchedule%>" runat="server"/></span>
                        <span class="plan-detail"><asp:Localize ID="PaymentSchedule" runat="server"/></span>
                    </div>              
                </div>
                <div style="margin-top:35px;">          
                    <iframe id="PurchasePlanPrintIframe" class="purchase-plan-doc" src="../../docs/localization/en-us/ZeroTouchPlanPurchaseTsCs.htm"></iframe>
                </div>
            </div>
            <div id="EnterBillingInfoDiv" runat="server" clientidmode="Static" class="purchase-plan-reviewterms" style="visibility: hidden;display:none;margin-top:22px;">
            
                <div id="EnterBillingInfoContentDiv">
                    <div class="purchase-plan-step-enter-text">
                        <asp:Localize ID="Localize5" Text="<%$resources:Language,PurchasePlan_EnterBillingInfo_Content%>" runat="server"/>
                    </div>
                    <div class="purchase-plan-cridit-card-details">
                        <div class="purchase-plan-card-text">
                            <asp:Localize ID="Localize7" Text="<%$resources:Language,PurchasePlan_CreditCardDetails%>" runat="server"/>
                        </div>
                        <div class="purchase-plan-card-type-text">
                            <asp:Localize ID="Localize9" Text="<%$resources:Language,PurchasePlan_CardType%>" runat="server"/><span class="required-indicator-red">*</span>
                        </div>
                        <div style="height:30px;">
                            <div id="CCType_Visa" class="purchase-plan-card-visa-unselect" onclick="CCTypeButton_Click(<% =(int)Infrastructure.Maestro.PortalTypes.CCTypeEnum.Visa%>)"></div>
                            <div id="CCType_Mastercard" class="purchase-plan-card-mastercard-unselect" onclick="CCTypeButton_Click(<% =(int)Infrastructure.Maestro.PortalTypes.CCTypeEnum.MasterCard%>)"></div>
                            <div  id="CCType_Discover"class="purchase-plan-card-discover-unselect" onclick="CCTypeButton_Click(<% =(int)Infrastructure.Maestro.PortalTypes.CCTypeEnum.Discover_Novus%>)"></div>
                            <div id="CCType_Amex" class="purchase-plan-card-amex-unselect" onclick="CCTypeButton_Click(<% =(int)Infrastructure.Maestro.PortalTypes.CCTypeEnum.Amex%>)"></div>
                            <div class="purchase-plan-card-type-error"><dxe:ASPxImage ID="ImageCardType_Error" runat="server" SkinID="purchasePlanErrorIcon" ClientInstanceName="ImageCardType_Error"
                                    ToolTip="<%$ Resources:Language,PurchaseCardTypeIsARequiredField %>" ClientVisible="false" />                        
                            </div>
                        </div>               
                        <div class="purchase-plan-card-number-text">
                            <asp:Localize ID="Localize12" Text="<%$resources:Language,PurchasePlan_CardNumber%>" runat="server"/><span class="required-indicator-red">*</span>                    
                            <div class="purchase-plan-card-number-edit">
                                <div style=" float:left"><dxe:ASPxTextBox runat="server" ID="CardInput" ClientInstanceName="txtCardNumber" 
                                     CssClass="purchase-plan-card-number-field" />
                                </div>
                                <div class="purchase-plan-error-image">
                                <dxe:ASPxImage ID="ImageCardNummber_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon" ClientInstanceName="ImageCardNummber_ConInvalidCharacter"
                                    ToolTip="<%$ Resources:Language,PurchasePlan_ValidCardErrorMessage %>" ClientVisible="false" />
                                <dxe:ASPxImage ID="ImageCardNummber_Error" runat="server" SkinID="purchasePlanErrorIcon" ClientInstanceName="ImageCardNummber_Error"
                                    ToolTip="<%$ Resources:Language,PurchaseCardNumberIsARequiredField %>" ClientVisible="false" />                        
                                </div>
                            </div>
                        </div>
                        <div class="purchase-plan-exp-text">
                            <asp:Localize ID="Localize11" Text="<%$resources:Language,PurchasePlan_ExpirationDate%>" runat="server"/><span class="required-indicator-red">*</span>                    
                            <div>
                              <div style=" float:left"><dxe:ASPxComboBox ID="cmbExpMonth" ClientInstanceName="cmbExpMonth" CssClass="purchase-plan-input-expdate" ItemStyle-CssClass="combobox-item" 
                                 ItemStyle-SelectedStyle-CssClass="combo-selected-item" ItemStyle-HoverStyle-CssClass="combo-hover-item"
                                 runat="server" DataSourceID="dataExpMonth" TextField="Text" ValueField="Value" /></div>
                              <div class="purchase-plan-forward-slash-divider" style=" float:left">/</div>
                              <div style=" float:left"><dxe:ASPxComboBox ID="cmbExpYear" ClientInstanceName="cmbExpYear" CssClass="purchase-plan-input-expdate" ItemStyle-CssClass="combobox-item" 
                                    ItemStyle-SelectedStyle-CssClass="combo-selected-item" ItemStyle-HoverStyle-CssClass="combo-hover-item"
                                 runat="server" DataSourceID="dataExpYear" /></div>                       
                            </div>
                            <div class="purchase-plan-error-image">
                            <dxe:ASPxImage ID="ImageExpDate_Error" runat="server" SkinID="purchasePlanErrorIcon" ClientInstanceName="ImageExpDate_Error"
                                            ToolTip="<%$ Resources:Language,PurchasePlan_ExpDateErrorMessage %>" ClientVisible="false" />
                            <dxe:ASPxImage ID="ImageExpDate_ConError" runat="server" SkinID="purchasePlanErrorIcon" ClientInstanceName="ImageExpDate_ConError"
                                            ToolTip="<%$ Resources:Language,PurchaseExpDateIsARequiredField %>" ClientVisible="false" />
                            </div>                   
                            </div>
                        </div>       
                    <div class="purchase-plan-billing-details" style=" margin-left:50px">
                        <div class="purchase-plan-billing-text">
                            <asp:Localize ID="Localize13" Text="<%$resources:Language,PurchasePlan_BillingAddress%>" runat="server"/>
                        </div>
                        <div class="purchase-plan-billing-detail-text" style="margin-top:20px;">                   
                            <asp:Localize ID="Localize14" Text="<%$resources:Language,PurchasePlan_Address%>" runat="server"/><span class="required-indicator-red">*</span>
                             <div class="purchase-plan-card-number-edit">   
                                <dxe:ASPxTextBox runat="server" ID="AddressInput" ClientInstanceName="txtAddress" 
                                    CssClass="purchase-plan-address-field" />
                            </div> 
                             <div class="purchase-plan-billing-error-image" style=" margin-top:0px;"> 
                                <dxe:ASPxImage ID="ImageAddress_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon"
                                    ToolTip="<%$ Resources:Language,BillingAddressContainsInvalidCharacters %>" ClientInstanceName="ImageAddress_ConInvalidCharacter"
                                    ClientVisible="false" />
                                <dxe:ASPxImage ID="ImageAddress_ConError" runat="server" SkinID="purchasePlanErrorIcon"
                                    ClientInstanceName="ImageAddress_ConError" ToolTip="<%$ Resources:Language,BillingAddressIsARequiredField %>"
                                    ClientVisible="false" />
                            </div>                   
                        </div>
                        <div  style="margin-top:30px;">
                            <div class="purchase-plan-billing-address">
                                <asp:Localize ID="Localize15" Text="<%$resources:Language,PurchasePlan_City%>" runat="server"/><span class="required-indicator-red">*</span>
                                <div class="purchase-plan-card-number-edit">   
                                    <dxe:ASPxTextBox runat="server" ID="CityInput" ClientInstanceName="txtCity" 
                                        CssClass="purchase-plan-city-field" />
                                </div>
                            </div>
                            <div class="purchase-plan-billing-error-image">                       
                                <dxe:ASPxImage ID="ImageCity_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon"
                                            ToolTip="<%$ Resources:Language,BillingCityContainsInvalidCharacters %>" ClientInstanceName="ImageCity_ConInvalidCharacter"
                                            ClientVisible="false" />
                                <dxe:ASPxImage ID="ImageCity_ConError" runat="server" SkinID="purchasePlanErrorIcon"
                                    ClientInstanceName="ImageCity_ConError" ToolTip="<%$ Resources:Language,BillingCityIsARequiredField %>"
                                    ClientVisible="false" />
                            </div>
                            <div class="purchase-plan-billing-address">
                                <asp:Localize ID="Localize16" Text="<%$resources:Language,PurchasePlan_State%>" runat="server"/><span class="required-indicator-red">*</span>
                                <div class="purchase-plan-card-number-edit">   
                                    <dxe:ASPxComboBox ID="cmbState" ClientInstanceName="cmbStateProvince" CssClass="purchase-plan-state-field" ItemStyle-CssClass="combobox-item" 
                                        ItemStyle-SelectedStyle-CssClass="combo-selected-item" ItemStyle-HoverStyle-CssClass="combo-hover-item"
                                        runat="server" ValueField = "Code" TextField = "Name" OnCallback="cmbState_Callback"> 
                                        <ClientSideEvents  EndCallback="cmbStateProvince_EndCallBack"/>
                                    </dxe:ASPxComboBox>
                                </div>
                            </div>
                            <div class="purchase-plan-billing-error-image"> 
                                <dxe:ASPxImage ID="ImageStateProvince_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon"
                                            ToolTip="<%$ Resources:Language,StateProvinceContainsInvalidCharacters %>" ClientInstanceName="ImageStateProvince_ConInvalidCharacter"
                                            ClientVisible="false" />
                                <dxe:ASPxImage ID="ImageStateProvince_ConError" runat="server" SkinID="purchasePlanErrorIcon"
                                    ClientInstanceName="ImageStateProvince_ConError" ToolTip="<%$ Resources:Language,StateFieldIsRequiredField %>"
                                    ClientVisible="false" />
                            </div>
                        </div>
                        <div style="margin-top:80px;">
                            <div class="purchase-plan-billing-address" >
                                <asp:Localize ID="Localize17" Text="<%$resources:Language,PurchasePlan_Country%>" runat="server"/><span class="required-indicator-red">*</span>
                                <div class="purchase-plan-card-number-edit">
                                <dxe:ASPxComboBox ID="cmbCountry" ClientInstanceName="cmbCountry" CssClass="purchase-plan-state-field" ItemStyle-CssClass="combobox-item" 
                                    ItemStyle-SelectedStyle-CssClass="combo-selected-item" ItemStyle-HoverStyle-CssClass="combo-hover-item"
                                    runat="server" DataSourceID="dataCountry" TextField="Name" ValueField="Code">  
                                 <ClientSideEvents  SelectedIndexChanged="function(s, e) { OnCountryChanged(s); }" />
                                </dxe:ASPxComboBox>
                                </div>
                            </div>
                            <div class="purchase-plan-billing-error-image"> 
                                 <dxe:ASPxImage ID="ImageCountry_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon"
                                     ToolTip="<%$ Resources:Language,CountryFieldContainsInvalidCharacters %>" ClientInstanceName="ImageCountry_ConInvalidCharacter"
                                     ClientVisible="false" />
                                <dxe:ASPxImage ID="ImageCountry_ConError" runat="server" SkinID="purchasePlanErrorIcon"
                                    ClientInstanceName="ImageCountry_ConError" ToolTip="<%$ Resources:Language,CountryFieldIsRequiredField %>"
                                    ClientVisible="false" />
                            </div>
                            <div class="purchase-plan-billing-address">
                                <asp:Localize ID="Localize18" Text="<%$resources:Language,PurchasePlan_PostalCode%>" runat="server"/><span class="required-indicator-red">*</span>
                                <div class="purchase-plan-card-number-edit">   
                                        <dxe:ASPxTextBox runat="server" ID="PostalCodeInput" ClientInstanceName="txtPostalCode" 
                                            CssClass="purchase-plan-state-field" />
                                </div>
                            </div>
                            <div class="purchase-plan-billing-error-image"> 
                                <dxe:ASPxImage ID="ImagePostalCode_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon"
                                     ToolTip="<%$ Resources:Language,PostalCodeContainsInvalidCharacters %>" ClientInstanceName="ImagePostalCode_ConInvalidCharacter"
                                     ClientVisible="false" />
                                <dxe:ASPxImage ID="ImagePostalCode_ConError" runat="server" SkinID="purchasePlanErrorIcon"
                                    ClientInstanceName="ImagePostalCode_ConError" ToolTip="<%$ Resources:Language,PostalCodeIsARequiredField %>"
                                    ClientVisible="false" />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <div id="ConfirmPurchaseDiv" runat="server" clientidmode="Static"  style="visibility: hidden;display:none;">
                <div class="purchase-plan-confirm-payment-notice">
                   <asp:Localize ID="FirstPaymentNotice" runat="server"/>
                </div>           
               <div class="purchase-plan-reviewterms" style="margin-top:10px;">
                   <div class="purchase-plan-step-enter-text">
                        <asp:Localize ID="Localize19" Text="<%$resources:Language,PurchasePlan_ConfirmInstructions%>" runat="server"/>
                      </div>
                   <div>
                       <div class="purchase-plan-confirm-detail-left">
                            <div class="purchase-plan-confirm-detail" >
                                <asp:Localize ID="Localize20" Text="<%$resources:Language,PurchasePlan_ConfirmPlanDetails%>" runat="server"/>
                            </div>
                            <div style=" margin-top:10px;">
                                <div class="purchase-plan-confirm-detail-content"><asp:Localize ID="Localize21" Text="<%$resources:Language,PurchasePlan_ConfirmPlanSize%>" runat="server"/></div>
                                <div class="purchase-plan-confirm-detail-content-lable"><asp:Localize ID="txtPlanSize"  runat="server"/></div> 
                            </div>
                             <div style=" margin-top:30px;">
                                <div class="purchase-plan-confirm-detail-content"><asp:Localize ID="Localize23" Text="<%$resources:Language,PurchasePlan_ConfirmBaseMonthlyPrice%>" runat="server"/></div>
                                <div class="purchase-plan-confirm-detail-content-lable"><asp:Localize ID="txtBaseMonthlyPrice"  runat="server"/></div> 
                            </div> 
                             <div style=" margin-top:50px;">
                                <div class="purchase-plan-confirm-detail-content"><asp:Localize ID="Localize25" Text="<%$resources:Language,PurchasePlan_ConfirmExtraGB%>" runat="server"/></div>
                                <div class="purchase-plan-confirm-detail-content-lable"><asp:Localize ID="txtExtraGB" runat="server"/></div> 
                            </div>                     
              
                        </div>
                       <div class="purchase-plan-confirm-detail-left" style="margin-left:15px;">
                            <div class="purchase-plan-confirm-detail" >
                                <asp:Localize ID="Localize22" Text="<%$resources:Language,PurchasePlan_ConfirmPaymentDetails%>" runat="server"/>
                            </div>
                            <div style=" margin-top:10px;">
                                <div class="purchase-plan-confirm-detail-content"><asp:Localize ID="Localize24" Text="<%$resources:Language,PurchasePlan_ConfirmCardNumber%>" runat="server"/></div>
                                <div class="purchase-plan-confirm-detail-content-lable" id="txtConfirmCardNumber"></div> 
                            </div>
                             <div style=" margin-top:30px;">
                                <div class="purchase-plan-confirm-detail-content"><asp:Localize ID="Localize27" Text="<%$resources:Language,PurchasePlan_ConfirmExpDate%>" runat="server"/></div>
                                <div class="purchase-plan-confirm-detail-content-lable" id="txtConfirmExpDate"></div> 
                            </div> 
                             <div style=" margin-top:50px;">
                                <div class="purchase-plan-confirm-detail-content"><asp:Localize ID="Localize29" Text="<%$resources:Language,PurchasePlan_ConfirmBillingZip%>" runat="server"/></div>
                                <div class="purchase-plan-confirm-detail-content-lable" id="txtConfirmBillingZip"></div> 
                            </div>                     
              
                        </div>
                   </div>
                   <div class="purchase-plan-confirm-billing-works">
                        <asp:Localize ID="Localize26" Text="<%$resources:Language,PurchasePlan_ConfirmHowBillingWorks%>" runat="server"/>
                   </div>
                   <div class="purchase-plan-confirm-billing-works-content">
                        <asp:Localize ID="Localize28" Text="<%$resources:Language,PurchasePlan_ConfirmHowBillingWorks_Content%>" runat="server"/>
                    </div>
                   <div style="margin-top:20px;">                   
                        <div class="purchase-plan-confirm-sent-email"><asp:Localize ID="Localize30" Text="<%$resources:Language,PurchasePlan_ConfirmSentEmail%>" runat="server"/><span class="required-indicator-red">*</span></div>
                        <div class="purchase-plan-card-number-edit">   
                            <dxe:ASPxTextBox runat="server" ID="txtEmailTo" ClientInstanceName="txtEmailTo" 
                                CssClass="purchase-plan-email-field" />
                        </div> 
                        <div class="purchase-plan-billing-error-image" style=" margin-top:0px"> 
                            <dxe:ASPxImage ID="ImageSentEmail_ConInvalidCharacter" runat="server" SkinID="purchasePlanErrorIcon"
                                ToolTip="<%$ Resources:Language,PurchasePlan_EmailAddressContainsInvalidCharacters %>" ClientInstanceName="ImageSentEmail_ConInvalidCharacter"
                                ClientVisible="false" />
                            <dxe:ASPxImage ID="ImageSentEmail_ConError" runat="server" SkinID="purchasePlanErrorIcon"
                                ClientInstanceName="ImageSentEmail_ConError" ToolTip="<%$ Resources:Language,PurchasePlan_EmailAddressIsARequiredField %>"
                                ClientVisible="false" />
                       </div>                   
                  </div>
    
               </div>
                
            </div>
                    </dxp:PanelContent>
                </PanelCollection>
            </dxcp:ASPxCallbackPanel>      
                      
            <div id="ReviewTermsDivFooter" class="purchase-plan-reviewterms-footer"  runat="server" clientidmode="Static">
                <div style=" margin-top:10px;">
                    <div style="float:left"> 
                        <intronis:ImageButton runat="server" ID="PrintButton" DefaultText="<%$ Resources:Language,PurchasePlan_Print %>"
                            InstanceName="PurchasePlanPrintButton" IconCssClass="image-button-no-icon" 
                            ClickFunction="PurchasePlanPrintButton_Click" ClientVisible="true"/>
                   </div>
                   
                   <div style="float:right">           
                         <span class="purchase-plan-check-agree"><asp:Localize ID="Localize10" Text="<%$resources:Language,PurchasePlan_CheckAgree%>" runat="server"/></span>
                         <span style="float:right;"><asp:CheckBox ID="cbAgree" ClientIDMode="Static" runat="server" /></span> 
                   </div>
               </div>  
            </div> 
             <div class="purchase-plan-next">
                <div style="float:right;margin-left:5px;">
                    <intronis:ImageButton runat="server" ID="Confirm" DefaultText="<%$ Resources:Language,PurchasePlan_Confirm %>"
                        InstanceName="PurchasePlanWizardConfirmButton" IconCssClass="image-button-no-icon" 
                        ClientVisible="false"   ClickFunction="PurchasePlanConfirmButton_Click"  />
                </div>
                <div style="float:right;margin-left:5px;">
                    <intronis:ImageButton runat="server" ID="NextButton" DefaultText="<%$ Resources:Language,BrandingWizard_Next %>"
                        InstanceName="PurchasePlanWizardNextButton" IconCssClass="image-button-icon-next image-button-icon-next-arrow" 
                         ClickFunction="PurchasePlanNextButton_Click"/>
                </div>
                <div style="float:right;margin-left:5px;">
                    <intronis:ImageButton runat="server" ID="PreviousButton" DefaultText="<%$ Resources:Language,BrandingWizard_Previous %>"
                        InstanceName="PurchasePlanWizardPreviousButton" IconCssClass="image-button-icon-back image-button-icon-back-arrow" 
                      ClickFunction="PurchasePlanPreviousButton_Click"  ClientVisible="false" />
                </div>           
            </div> 
        </div>
    
    
    <dxhf:ASPxHiddenField ID="PurchasePlanWizardHiddenField" runat="server" ClientInstanceName="PurchasePlanWizardHiddenField" />
    <intronis:PurchasePlanSlideOutLightbox runat="server" ID="PurchasePlanSlideOutLightbox"/>
    <intronis:PurchasePlanWizardCloseLightbox runat="server" ID="PurchasePlanWizardCloseLightbox" />
    <dxhf:ASPxHiddenField ID="messageLanguagePurchasePlanWizard" runat="server" ClientInstanceName="messageLanguagePurchasePlanWizard" />
    <asp:ObjectDataSource ID="dataExpMonth" runat="server" TypeName="Domain.Maestro.DAL.GeneralDataSource"
        SelectMethod="ExpMonthList"></asp:ObjectDataSource>
    <asp:ObjectDataSource ID="dataExpYear" runat="server" TypeName="Domain.Maestro.DAL.GeneralDataSource"
        SelectMethod="ExpYearList"></asp:ObjectDataSource>
    <asp:ObjectDataSource ID="dataCountry" runat="server" TypeName="Domain.Maestro.DAL.GeneralDataSource"
        SelectMethod="CountryList"></asp:ObjectDataSource>
    <dxcb:ASPxCallback ID="SavePurchasePlanCallBack" runat="server" 
        ClientInstanceName="SavePurchasePlanCallBack" 
        oncallback="SavePurchasePlanCallBack_Callback">
        <ClientSideEvents CallbackComplete="savePurchasePlan_CallbackComplete" />
    </dxcb:ASPxCallback>

    服务端部分:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Resources;
    using Domain.Utilities;
    using Infrastructure.Maestro.PortalTypes.Billing;
    using Domain.Maestro.DAL;
    using Infrastructure.Maestro.PortalTypes;
    using DynaLoad.Server;
    using Domain.Data;
    using DevExpress.Web.ASPxClasses;
    using Domain.Maestro;
    using Infrastructure.Maestro.Utilities;
    using Domain.Constants;
    using Domain;
    
    namespace WebPortalApplication.App_Components.Forms
    {
        public partial class PurchasePlanWizardForm : System.Web.UI.UserControl
        {
    
            protected void Page_Load(object sender, EventArgs e)
            {
                PageResource.IncludeScript("/js/ValidateFields.js", this);
                PageResource.IncludeScript("/js/common.js", this);
                PageResource.IncludeScript("/js/lightboxes/PurchasePlanWizard.js", this);
    
                this.CardInput.MaxLength = (int)ColumnLengths.CreditCard;
                this.PostalCodeInput.MaxLength = (int)ColumnLengths.Zip;
                this.CityInput.MaxLength = (int)ColumnLengths.City;
                this.AddressInput.MaxLength = (int)ColumnLengths.Address;
    
    
    
                this.cmbExpMonth.DropDownButton.Image.Url = VirtualPathUtility.ToAbsolute("~/App_Themes/" + Page.Theme + "/") + "images/icons/MenuDropdown.png";
                this.cmbExpYear.DropDownButton.Image.Url = VirtualPathUtility.ToAbsolute("~/App_Themes/" + Page.Theme + "/") + "images/icons/MenuDropdown.png";
                this.cmbState.DropDownButton.Image.Url = VirtualPathUtility.ToAbsolute("~/App_Themes/" + Page.Theme + "/") + "images/icons/MenuDropdown.png";
                this.cmbCountry.DropDownButton.Image.Url = VirtualPathUtility.ToAbsolute("~/App_Themes/" + Page.Theme + "/") + "images/icons/MenuDropdown.png";
    
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlanWizardJS_CloseWizard", Language.PurchasePlanWizardJS_CloseWizard);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlanWizardJS_CheckAgreeAlert", Language.PurchasePlanWizardJS_CheckAgreeAlert);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlanWizardJS_IsRequiredFields", Language.PurchasePlanWizardJS_IsRequiredFields);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlan_ReviewTermsConditions", Language.PurchasePlan_ReviewTermsConditions);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlan_TitleEnterBillingInformation", Language.PurchasePlan_TitleEnterBillingInformation);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlan_TitleReviewAndConfirmPurchase", Language.PurchasePlan_TitleReviewAndConfirmPurchase);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlan_EmailAddressIsARequiredField", Language.PurchasePlan_EmailAddressIsARequiredField);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlan_EmailAddressContainsInvalidCharacters", Language.PurchasePlan_EmailAddressContainsInvalidCharacters);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlanWizardJS_Error", Language.PurchasePlanWizardJS_Error);
                this.messageLanguagePurchasePlanWizard.Set("PurchasePlanWizardJS_AnErrorOccurred", Language.PurchasePlanWizardJS_AnErrorOccurred);
            }
    
            protected void InitPlanInfoCallBack_Callback(object source, CallbackEventArgsBase e)
            {
                var commandArgs = Json.Import<CustomCallbackCommandArgs>(e.Parameter);
                int planId = 0;
                if (commandArgs == null) return;
    
                if (commandArgs.ContainsKey("planId"))
                    planId = commandArgs.PlanId;
    
                Plan plan = PlanDataSource.GetPlanInfo(planId);
                this.PlanSummary.Text = string.Format(Language.PurchasePlan_PlanSummary, FileSize.ToText(plan.TotalSize, false, 0));
                string costExtraBlock = string.Format("{0:C2}", plan.CostExtraBlock);
                string totalSize = FileSize.ToText(plan.TotalSize, false);
                string blockSize = FileSize.ToText(plan.BlockSize, false);
                this.OnlineBackupPlan.Text = string.Format(Language.PurchasePlan_OnlineBackupPlanContent, totalSize, costExtraBlock, blockSize);
                switch (plan.Frequency)
                {
                    case (int)Infrastructure.Maestro.PortalTypes.PaymentSchedule.Recurring_Monthly:
                        this.PaymentSchedule.Text = Language.PaymentSchedule_Recurring_Monthly;
                        break;
                    case (int)Infrastructure.Maestro.PortalTypes.PaymentSchedule.Recurring_Quarterly:
                        this.PaymentSchedule.Text = Language.PaymentSchedule_Recurring_Quarterly;
                        break;
                    case (int)Infrastructure.Maestro.PortalTypes.PaymentSchedule.Recurring_bi_Annually:
                        this.PaymentSchedule.Text = Language.PaymentSchedule_Recurring_bi_Annually;
                        break;
                    case (int)Infrastructure.Maestro.PortalTypes.PaymentSchedule.Recurring_Yearly:
                        this.PaymentSchedule.Text = Language.PaymentSchedule_Recurring_Yearly;
                        break;
    
                    default:
                        this.PaymentSchedule.Text = string.Format(Language.PaymentSchedule_Default_Recurring_Months, plan.Frequency);
                        break;
                };
    
                string formattedDate = DateTime.Today.AddDays(1).ToString(CultureInfoHelper.DateFormat);
                this.EffectiveDate.Text = formattedDate;
    
                Partner info = PartnersDataSource.Info();
    
                //only seve the original values which are not changed 
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Company", info.BillingAddress.Company);
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Fax", info.BillingAddress.Fax);
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Extension", info.BillingAddress.Extension);
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Name", info.BillingAddress.Name);
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Phone", info.BillingAddress.Phone);
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Website", info.BillingAddress.Website);
                this.OriginalBillingAddressHiddenField.Set("BillingAddress_Email", info.BillingAddress.Email);
    
                AddressInput.Text = (info.BillingAddress.Address1 + " " + info.BillingAddress.Address2).Trim();
                CityInput.Text = info.BillingAddress.City;
                PostalCodeInput.Text = info.BillingAddress.Zip;
    
                string[] arrSupportedUSCountry = { "US", "USA", "United States" };
                string[] arrSupportedCACountry = { "CA", "CAN", "Canada" };
                string countryCode = "USA";
                if (arrSupportedUSCountry.Contains(info.BillingAddress.Country))
                {
                    cmbCountry.SelectedIndex = 0;
    
                }
                else if (arrSupportedCACountry.Contains(info.BillingAddress.Country))
                {
                    cmbCountry.SelectedIndex = 1;
                    countryCode = "CAN";
                }
                var stateList = StateProvinceNameList(countryCode);
                cmbState.DataSource = stateList;
                cmbState.DataBind();
                int index = -1;
                index = stateList.FindIndex(state => state.Code.ToLower() == info.BillingAddress.State.ToLower());
                if (index < 0)
                {
                    index = stateList.FindIndex(state => state.Name.ToLower() == info.BillingAddress.State.ToLower());
                }
                cmbState.SelectedIndex = index;
    
    
                double currentEstimatedCost = plan.Price;
                string currentEstimatedCostFormated = string.Format("{0:C2}", currentEstimatedCost);
                FirstPaymentNotice.Text = string.Format(Language.PurchasePlan_FirstPaymentNotice, currentEstimatedCostFormated, formattedDate);
                this.txtPlanSize.Text = FileSize.ToText(plan.TotalSize, false, 0);
                this.txtBaseMonthlyPrice.Text = string.Format("{0:C2}", plan.Price);
                this.txtExtraGB.Text = string.Format("{0:C2}", plan.CostExtraBlock);
    
                this.txtEmailTo.Text = info.Email;
            }
    
            private List<StateProvince> StateProvinceNameList(string countryCode)
            {
    
                List<StateProvince> ls = new List<StateProvince>();
                List<StateProvince> stateList = GeneralDataSource.StateProvinceList();
                var result = stateList.Where(s => (s.CountryCode.ToLower() == countryCode.ToLower()));
                ls = result.ToList();
                return ls;
            }
    
            protected void cmbState_Callback(object sender, CallbackEventArgsBase e)
            {
                string countryCode = "USA";
                if (cmbCountry.SelectedIndex == 0)
                {
                    countryCode = "USA";
                }
                else if (cmbCountry.SelectedIndex == 1)
                {
                    countryCode = "CAN";
                }
                cmbState.DataSource = StateProvinceNameList(countryCode);
                cmbState.DataBind();
            }
    
            protected void SavePurchasePlanCallBack_Callback(object source, DevExpress.Web.ASPxCallback.CallbackEventArgs e)
            {
                var commandArgs = Json.Import<CustomCallbackCommandArgs>(e.Parameter);
                int planId = 0;
                if (commandArgs == null) return;
    
                if (commandArgs.ContainsKey("planId"))
                    planId = commandArgs.PlanId;
    
                Address currentBillingAdress = new Address();
    
                currentBillingAdress.Company = OriginalBillingAddressHiddenField.Get("BillingAddress_Company").ToString();
                currentBillingAdress.Fax = OriginalBillingAddressHiddenField.Get("BillingAddress_Fax").ToString();
                currentBillingAdress.Extension = OriginalBillingAddressHiddenField.Get("BillingAddress_Extension").ToString();
                currentBillingAdress.Name = OriginalBillingAddressHiddenField.Get("BillingAddress_Name").ToString();
                currentBillingAdress.Phone = OriginalBillingAddressHiddenField.Get("BillingAddress_Phone").ToString();
                currentBillingAdress.Website = OriginalBillingAddressHiddenField.Get("BillingAddress_Website").ToString();
                currentBillingAdress.Email = OriginalBillingAddressHiddenField.Get("BillingAddress_Email").ToString();
    
                currentBillingAdress.Address1 = AddressInput.Text;
                currentBillingAdress.Address2 = string.Empty;
                currentBillingAdress.City = CityInput.Text;
                currentBillingAdress.Country = cmbCountry.Value.ToString();
                currentBillingAdress.State = cmbState.ClientValue.ToString();
                currentBillingAdress.Zip = PostalCodeInput.Text;
    
                string cardNumber = CardInput.Text;
                int expMonth = Convert.ToInt32(cmbExpMonth.Value);
                int expYear = Convert.ToInt32(cmbExpYear.Value);
                string confirmEmailTo = txtEmailTo.Text;
    
                try
                {
    
                    bool isSave = PartnersDataSource.PartnerTrialConvertToZeroTouch(PageHelper.CustomerUsername, planId, cardNumber, expYear, expMonth, currentBillingAdress, confirmEmailTo);
                    if (isSave)
                    {
                        Session["PartnerCategory"] = (int)PartnerCategory.PARTNER_CATEGORY_FULL;
                        Session["TrialRemaining"] = null;
                        Session["EndDate"] = null;
                        Session["DisplayResources"] = null;
                        Session["DisplayBilling"] = null;
                        Session["DisplayManageIntegrations"] = null;
                        Session["DisplayAccountSnapshot"] = null;
                        Session["DisplayDeployableInstaller"] = null;
    
                        SavePurchasePlanCallBack.JSProperties["cpFlag"] = true;
                        SavePurchasePlanCallBack.JSProperties["cpUsername"] = PageHelper.CustomerUsername;
                    }
                    else
                    {
                        SavePurchasePlanCallBack.JSProperties["cpFlag"] = false;
                    }
                }
                catch (Exception)
                {
                    SavePurchasePlanCallBack.JSProperties["cpError"] = true;
                }
            }
        }
        internal class CustomCallbackCommandArgs : JsonDictionary
        {
            public int PlanId
            {
                get { return ContainsKey("planId") ? Convert.ToInt32(base["planId"]) : -1; }
            }
        }
    }

     

  • 相关阅读:
    财务自由之路-我用Airtest刷抖音致富
    Python基础-背单词游戏
    别人是在谈薪酬,而你是在自残
    不写一行代码,使用Airtest完成自动化测试
    精致的JavaScript代码
    浅谈排序二叉树
    JavaScript 生产者消费者模型
    IDEA 激活码全家桶 webStorm亲测可用【更新日期2020.3.30】
    Cocos-JS HTTP网络请求
    初始OpenGL
  • 原文地址:https://www.cnblogs.com/caosenianhuan/p/3222565.html
Copyright © 2011-2022 走看看