如何在进入页面时获得下拉列表的选定值或索引

本文关键字:下拉列表 索引 | 更新日期: 2023-09-27 17:57:34

我有一个产品订购页面,其中包含中继器内的各种产品选项下拉列表。"添加到购物车"按钮处于"非活动"状态,直到所有选项都有选择为止。从技术上讲,"添加到购物车"按钮有两个图像:一个是灰色图像,当用户没有为产品的所有可用选项选择时使用,另一个是橙色图像,当使用者从每个下拉列表字段中进行选择时使用。这些图像由ShowAddToBasket和HideAddToBascket函数设置。

下拉列表字段的连接在于,来自第一字段的选择将决定对第二字段、有时是第三字段的选择。如果第二个字段不是由第一个字段预先设置的,则第二个域将确定第三个字段的值。第一个下拉列表字段从未被禁用,但其他两个字段可以基于所选的选项。

有一些产品在进入页面时将其所有3个下拉列表都预设为特定选项。这意味着它们都被禁用,用户无法更改。无论用户是否输入数量,"添加到购物车"按钮都不会激活。我一辈子都不知道如何更改它,以便在这种罕见的情况下,一旦输入数量,"添加到购物车"按钮就会自动设置为活动。下拉列表在这些页面中仍然有选择的选项——只是它们是固定的,用户不能更改。

在进入产品页面时,我是否可以获得这些下拉列表字段的选定值或选定索引?我希望能够检查它们是否真的是"空的",或者它们是否有选择,这样我就可以相应地设置"添加到购物车"按钮。

任何帮助都会很好,因为我真的陷入了困境!:(

下面是代码(我删除了很多不重要的功能):

protected void Page_Init(object sender, System.EventArgs e)
    {
        string MyPath = HttpContext.Current.Request.Url.AbsolutePath;
        MyPath = MyPath.ToLower();
        _Basket = AbleContext.Current.User.Basket;
        RedirQryStr = "";
        _ProductId = AlwaysConvert.ToInt(Request.QueryString["ProductId"]);
        if (Request.QueryString["LineID"] != null)
        {
            int LineID = Convert.ToInt32(Request.QueryString["LineID"].ToString());
            int itemIndex = _Basket.Items.IndexOf(LineID);
            BasketItem item = _Basket.Items[itemIndex];
            OldWeight.Text = item.Weight.ToString();
            OldQty.Text = item.Quantity.ToString();
            OldPrice.Text = item.Price.ToString();
        }
        int UnitMeasure = 0;
        SetBaidCustoms(ref UnitMeasure);
        GetPrefinishNote();
        _ProductId = AlwaysConvert.ToInt(Request.QueryString["ProductId"]);
        _Product = ProductDataSource.Load(_ProductId);
        if (_Product != null)
        {
            //GetPercentage();
            int _PieceCount = 0;
            double _SurchargePercent = 0;
            CheckoutHelper.GetItemSurcargePercent(_Product, ref _PieceCount, ref _SurchargePercent);
            SurchargePieceCount.Text = _PieceCount.ToString();
            SurchargePercent.Text = _SurchargePercent.ToString();
            //add weight
            BaseWeight.Value = _Product.Weight.ToString();
            //DISABLE PURCHASE CONTROLS BY DEFAULT
            AddToBasketButton.Visible = false;
            rowQuantity.Visible = false;
            //HANDLE SKU ROW
            trSku.Visible = (ShowSku && (_Product.Sku != string.Empty));
            if (trSku.Visible)
            {
                Sku.Text = _Product.Sku;
            }
            //HANDLE PART/MODEL NUMBER ROW
            trPartNumber.Visible = (ShowPartNumber && (_Product.ModelNumber != string.Empty));
            if (trPartNumber.Visible)
            {
                PartNumber.Text = _Product.ModelNumber;
            }
            //HANDLE REGPRICE ROW
            if (ShowMSRP)
            {
                decimal msrpWithVAT = TaxHelper.GetShopPrice(_Product.MSRP, _Product.TaxCode != null ? _Product.TaxCode.Id : 0);
                if (msrpWithVAT > 0)
                {
                    trRegPrice.Visible = true;
                    RegPrice.Text = msrpWithVAT.LSCurrencyFormat("ulc");
                }
                else trRegPrice.Visible = false;
            }
            else trRegPrice.Visible = false;
            // HANDLE PRICES VISIBILITY
            if (ShowPrice)
            {
                if (!_Product.UseVariablePrice)
                {
                    trBasePrice.Visible = true;
                    BasePrice.Text = _Product.Price.ToString("F2") + BairdLookUp.UnitOfMeasure(UnitMeasure);
                    trOurPrice.Visible = true;
                    trVariablePrice.Visible = false;
                }
                else
                {
                    trOurPrice.Visible = false;
                    trVariablePrice.Visible = true;
                    VariablePrice.Text = _Product.Price.ToString("F2");
                    string varPriceText = string.Empty;
                    Currency userCurrency = AbleContext.Current.User.UserCurrency;
                    decimal userLocalMinimum = userCurrency.ConvertFromBase(_Product.MinimumPrice.HasValue ? _Product.MinimumPrice.Value : 0);
                    decimal userLocalMaximum = userCurrency.ConvertFromBase(_Product.MaximumPrice.HasValue ? _Product.MaximumPrice.Value : 0);
                    if (userLocalMinimum > 0)
                    {
                        if (userLocalMaximum > 0)
                        {
                            varPriceText = string.Format("(between {0} and {1})", userLocalMinimum.LSCurrencyFormat("ulcf"), userLocalMaximum.LSCurrencyFormat("ulcf"));
                        }
                        else
                        {
                            varPriceText = string.Format("(at least {0})", userLocalMinimum.LSCurrencyFormat("ulcf"));
                        }
                    }
                    else if (userLocalMaximum > 0)
                    {
                        varPriceText = string.Format("({0} maximum)", userLocalMaximum.LSCurrencyFormat("ulcf"));
                    }
                    phVariablePrice.Controls.Add(new LiteralControl(varPriceText));
                }
            }
            //UPDATE QUANTITY LIMITS
            if ((_Product.MinQuantity > 0) && (_Product.MaxQuantity > 0))
            {
                string format = " (min {0}, max {1})";
                QuantityLimitsPanel.Controls.Add(new LiteralControl(string.Format(format, _Product.MinQuantity, _Product.MaxQuantity)));
                QuantityX.MinValue = _Product.MinQuantity;
                QuantityX.MaxValue = _Product.MaxQuantity;
            }
            else if (_Product.MinQuantity > 0)
            {
                string format = " (min {0})";
                QuantityLimitsPanel.Controls.Add(new LiteralControl(string.Format(format, _Product.MinQuantity)));
                QuantityX.MinValue = _Product.MinQuantity;
            }
            else if (_Product.MaxQuantity > 0)
            {
                string format = " (max {0})";
                QuantityLimitsPanel.Controls.Add(new LiteralControl(string.Format(format, _Product.MaxQuantity)));
                QuantityX.MaxValue = _Product.MaxQuantity;
            }
            if (QuantityX.MinValue > 0) QuantityX.Text = QuantityX.MinValue.ToString();
            AddToWishlistButton.Visible = AbleContext.Current.StoreMode == StoreMode.Standard;
        }
        else
        {
            this.Controls.Clear();
        }
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["Action"] != null)
            {
                if (Request.QueryString["Action"].ToString().ToLower() == "edit")
                {
                    SetEdit();
                }
            }
        }
    }
    protected void Page_Load(object sender, System.EventArgs e)
    {
        if (_Product != null)
        {
            if (ViewState["OptionDropDownIds"] != null)
            {
                _OptionDropDownIds = (Hashtable)ViewState["OptionDropDownIds"];
            }
            else
            {
                _OptionDropDownIds = new Hashtable();
            }
            if (ViewState["OptionPickerIds"] != null)
            {
                _OptionPickerIds = (Hashtable)ViewState["OptionPickerIds"];
            }
            else
            {
                _OptionPickerIds = new Hashtable();
            }
            _SelectedOptionChoices = GetSelectedOptionChoices();
            OptionsList.DataSource = GetProductOptions();
            OptionsList.DataBind();
            //set all to the first value
            foreach (RepeaterItem rptItem in OptionsList.Items)
            {
                DropDownList OptionChoices = (DropDownList)rptItem.FindControl("OptionChoices");
                OptionChoices.SelectedIndex = 1;
            }
            TemplatesList.DataSource = GetProductTemplateFields();
            TemplatesList.DataBind();
            KitsList.DataSource = GetProductKitComponents();
            KitsList.DataBind();
        }
        if (!Page.IsPostBack)
        {
            if (_Product.MSRP != 0)
            {
                salePrice.Visible = true;
                RetailPrice.Text = _Product.MSRP.ToString("$0.00");
            }
            DataSet ds = new DataSet();
            DataTable ResultTable = ds.Tables.Add("CatTable");
            ResultTable.Columns.Add("OptionID", Type.GetType("System.String"));
            ResultTable.Columns.Add("OptionName", Type.GetType("System.String"));
            ResultTable.Columns.Add("LinkHeader", Type.GetType("System.String"));
            foreach (ProductOption PhOpt in _Product.ProductOptions)
            {
                string MasterList = GetProductMaster(_ProductId, PhOpt.OptionId);
                string PerFootVal = "";
                string LinkHeader = "";
                string DefaultOption = "no";
                string PrefinishMin = "0";
                bool VisPlaceholder = true;
                ProductDisplayHelper.TestForVariantDependency(ref SlaveHide, _ProductId, PhOpt, ref PrefinishMin, ref PerFootVal, ref LinkHeader, ref VisPlaceholder, ref HasDefault, ref DefaultOption);
                if (PrefinishMin == "")
                    PrefinishMin = "0";
                DataRow dr = ResultTable.NewRow();
                dr["OptionID"] = PhOpt.OptionId + ":" + MasterList + ":" + PerFootVal + ":" + DefaultOption + ":" + PrefinishMin;
                Option _Option = OptionDataSource.Load(PhOpt.OptionId);
                dr["OptionName"] = _Option.Name;
                dr["LinkHeader"] = LinkHeader;
                ResultTable.Rows.Add(dr);
            }
            //Bind the data to the Repeater
            ItemOptions.DataSource = ds;
            ItemOptions.DataMember = "CatTable";
            ItemOptions.DataBind();
            //determine if buttons show
            if (ItemOptions.Items.Count == 0)
            {
                ShowAddToBasket(1);
                resetBtn.Visible = true;
            }
            else
            {
                HideAddToBasket(3);
            }
            if (Request.QueryString["Action"] != null)
            {
                ShowAddToBasket(1);
                SetDllAssociation(false);
            }
            ShowHideDrops();
        }
    }
    private void HideAddToBasket(int Location)
    {
        AddToBasketButton.Visible = false;
        AddToWishlistButton.Visible = false;
        resetBtn.Visible = false;
        if (Request.QueryString["Action"] == null)
        {
            SelectAll.Visible = true;
            WishGray.Visible = true;
            if (Request.QueryString["OrderItemID"] == null)
                BasketGray.Visible = true;
            else
                UpdateButton.Visible = false;
        }
        else
        {
            UpdateButton.Visible = true;
            NewButtons.Visible = false;
        }
        if ((_Product.MinQuantity == 1) & (_Product.MaxQuantity == 1))
        {
            AddToWishlistButton.Visible = false;
            BasketGray.Visible = false;
        }
    }
    private void ShowAddToBasket(int place)
    {
        resetBtn.Visible = true;
        if (Request.QueryString["Action"] != null)
        {
            UpdateButton.Visible = true;
            NewButtons.Visible = false;
        }
        else
        {
            UpdateButton.Visible = false;
            SelectAll.Visible = false;
            WishGray.Visible = false;
            BasketGray.Visible = false;
            if (Request.QueryString["OrderItemID"] == null)
            {
                AddToBasketButton.Visible = true;
                resetBtn.Visible = true;
                AddToWishlistButton.Visible = true;
            }
            else
            {
                UpdateButton.Visible = true;
                AddToBasketButton.Visible = false;
            }
        }
        if ((_Product.MinQuantity == 1) & (_Product.MaxQuantity == 1))
        {
            AddToWishlistButton.Visible = false;
            BasketGray.Visible = false;
            resetBtn.Visible = true;
        }
    }
    protected void OptionChoices_DataBound(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        if (ddl != null)
        {
            //bb5.Text = "ddl !=null<br />"; works
            List<OptionChoiceItem> ds = (List<OptionChoiceItem>)ddl.DataSource;
            if (ds != null && ds.Count > 0)
            {
                int optionId = ds[0].OptionId;
                Option opt = OptionDataSource.Load(optionId);
                ShowAddToBasket(4);
                OptionChoiceItem oci = ds.FirstOrDefault<OptionChoiceItem>(c => c.Selected);
                if (oci != null)
                {
                    ListItem item = ddl.Items.FindByValue(oci.ChoiceId.ToString());
                    if (item != null)
                    {
                        ddl.ClearSelection();
                        item.Selected = true;
                    }
                }

                if (opt != null && !opt.ShowThumbnails)
                {
                    if (!_OptionDropDownIds.Contains(optionId))
                    {
                        // bb5.Text = "!_OptionDropDownIds.Contains(optionId)<br />"; works
                        _OptionDropDownIds.Add(optionId, ddl.UniqueID);
                    }
                    if (_SelectedOptionChoices.ContainsKey(optionId))
                    {
                        ListItem selectedItem = ddl.Items.FindByValue(_SelectedOptionChoices[optionId].ToString());
                        if (selectedItem != null)
                        {
                            ddl.ClearSelection();
                            selectedItem.Selected = true;
                            //bb5.Text = "true: " + selectedItem.Selected.ToString()+"<br />"; doesn't work
                        }
                    }
                    StringBuilder imageScript = new StringBuilder();
                    imageScript.Append("<script type='"text/javascript'">'n");
                    imageScript.Append("    var " + ddl.ClientID + "_Images = {};'n");
                    foreach (OptionChoice choice in opt.Choices)
                    {
                        if (!string.IsNullOrEmpty(choice.ImageUrl))
                        {
                            imageScript.Append("    " + ddl.ClientID + "_Images[" + choice.Id.ToString() + "] = '" + this.Page.ResolveUrl(choice.ImageUrl) + "';'n");
                        }
                    }
                    imageScript.Append("</script>'n");
                    ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
                    if (scriptManager != null)
                    {
                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), ddl.ClientID, imageScript.ToString(), false);
                    }
                    else
                    {
                        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), ddl.ClientID, imageScript.ToString());
                    }
                }
            }
            ddl.Attributes.Add("onChange", "OptionSelectionChanged('" + ddl.ClientID + "');");
        }
    }
    protected Dictionary<int, int> GetSelectedOptionChoices()
    {
        HttpRequest request = HttpContext.Current.Request;
        Dictionary<int, int> selectedChoices = new Dictionary<int, int>();
        if (Page.IsPostBack)
        {
            foreach (int key in _OptionDropDownIds.Keys)
            {
                string value = (string)_OptionDropDownIds[key];
                Trace.Write(string.Format("Checking For - OptionId:{0}  DropDownId:{1}", key, value));
                string selectedChoice = request.Form[value];
                if (!string.IsNullOrEmpty(selectedChoice))
                {
                    int choiceId = AlwaysConvert.ToInt(selectedChoice);
                    if (choiceId != 0)
                    {
                        Trace.Write(string.Format("Found Selected Choice : {0}  -  {1}", key, choiceId));
                        selectedChoices.Add(key, choiceId);
                    }
                }
            }
            foreach (int key in _OptionPickerIds.Keys)
            {
                string value = (string)_OptionPickerIds[key];
                Trace.Write(string.Format("Checking For - OptionId:{0}  PickerId:{1}", key, value));
                string selectedChoice = request.Form[value];
                if (!string.IsNullOrEmpty(selectedChoice))
                {
                    int choiceId = AlwaysConvert.ToInt(selectedChoice);
                    if (choiceId != 0)
                    {
                        Trace.Write(string.Format("Found Selected Choice : {0}  -  {1}", key, choiceId));
                        selectedChoices.Add(key, choiceId);
                    }
                }
            }
        }
        else
        {
            string optionList = Request.QueryString["Options"];
            ShowAddToBasket(2);
            if (!string.IsNullOrEmpty(optionList))
            {
                string[] optionChoices = optionList.Split(',');
                if (optionChoices != null)
                {
                    foreach (string optionChoice in optionChoices)
                    {
                        OptionChoice choice = OptionChoiceDataSource.Load(AlwaysConvert.ToInt(optionChoice));
                        if (choice != null)
                        {
                            _SelectedOptionChoices.Add(choice.OptionId, choice.Id);
                        }
                    }
                    return _SelectedOptionChoices;
                }
            }
        }
        return selectedChoices;
    }
    protected void SetDDLs(object sender, EventArgs e)
    {
        bool isRandom = false;
        if (LengthDDL.Text != "")
            isRandom = true;
        SetDllAssociation(isRandom);
    }

如何在进入页面时获得下拉列表的选定值或索引

尝试访问Page_Load事件中的值。我认为Page_Init 中的值还没有绑定