关于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; }

        }

    }

}

 

 

你可能感兴趣的:(express)