Ajaxtoolkit:cascadingdropdown - 下拉菜单在 IE 中完美运行,但在 asp.net-C# 中的其他浏览器中不起作用

问题描述 投票:0回答:1

我最近加入了新公司,他们在 VS2008 中使用旧的 asp.net。它已经很旧了。我在修改过程中遇到的问题之一是他们使用的是Ajaxtoolkit3.0 cascadingdropdown。 Dropdown (ajaxtoolkit) 在 IE 上完美运行,但在其他浏览器中不起作用。第一次,我必须通过 IE 添加,然后它允许其他浏览器选择下拉菜单。 chrome 中的错误。 exp 头组为空,应该显示数据 铬错误。 exp 头组为空,它应该显示数据。请看上图。

同时。请看IE显示的内容。 IE显示完美结果 IE 显示完美结果。

第一个用户从此下拉列表中选择

<asp:DropDownList runat="Server" CssClass="frmTextBox" ID="ddlBudgetExpenseHead" Width="600px" />
然后出现这个

<asp:DropDownList runat="Server" CssClass="frmTextBox" 
                                                                                        ID="ddlBudgetExpenseHeadDetail" Width="400px" AutoPostBack="True"
                                                                                        onselectedindexchanged="ddlBudgetExpenseHeadDetail_SelectedIndexChanged" />
                                                                                    <ajaxToolkit:CascadingDropDown ID="ddlBudgetExpenseHeadDetail_CascadingDropDown" Category="BudgetExpenseHead"
                                                                                        ServicePath="~/WebService/wbsBudgetReferenceHead.asmx" ServiceMethod="GetBudgetReferenceHeadDetailListByBudgetExpenseHeadID"
                                                                                        runat="server" Enabled="True" ParentControlID="ddlBudgetExpenseHead" TargetControlID="ddlBudgetExpenseHeadDetail"
                                                                                        PromptText="All Budget Expense Head Groups(s)" LoadingText="[Loading Budget Expense Head Groups(s)]"
                                                                                        SelectedValue="" />

页面加载

if (!Page.IsPostBack)
            {
                
                GetValuesFromSession();
                LoadProjectSiteLocation();
                LoadBudgetReferenceHead();
                LoadRequirmentTypes();


              
                LoadUnitOfMeasurementForDuration();
                if (ViewState["IndentID"] != null)
                {
                    LoadIndentInformation();
                    LoadQuerySendTo();
                   
                }
 protected void LoadBudgetReferenceHead()
        {
            SMART.DAL.BMS.BudgetExpenseHead objBudgetExpenseHead = new SMART.DAL.BMS.BudgetExpenseHead();
            ddlBudgetExpenseHead.DataSource = objBudgetExpenseHead.SelectByProjectID(Convert.ToInt32(ViewState["ProjectID"]));
            ddlBudgetExpenseHead.DataTextField = "BudgetExpenseHeadDescription";
            ddlBudgetExpenseHead.DataValueField = "BudgetExpenseHeadID";
            ddlBudgetExpenseHead.DataBind();
        }
 protected void ddlBudgetExpenseHeadDetail_SelectedIndexChanged(object sender, EventArgs e)
        {
            SMART.DAL.BMS.BudgetExpenseHeadDetail objBudgetExpenseHeadDetail = new SMART.DAL.BMS.BudgetExpenseHeadDetail();
            DataTable dtBudgetExpenseHeadDetail;

            if (ddlBudgetExpenseHeadDetail.SelectedItem.Value == "")
            {
                dtBudgetExpenseHeadDetail = objBudgetExpenseHeadDetail.SelectByID(-1);
            }
            else
            {
                dtBudgetExpenseHeadDetail = objBudgetExpenseHeadDetail.SelectByID(Convert.ToInt32(ddlBudgetExpenseHeadDetail.SelectedItem.Value));
            }
            if (dtBudgetExpenseHeadDetail.Rows.Count > 0)
            {

                if (dtBudgetExpenseHeadDetail.Rows[0]["UnitofMeasurementDescription"].ToString() != "")
                {
                    txtBudgetUnitofMeasurement.Text = dtBudgetExpenseHeadDetail.Rows[0]["UnitofMeasurementDescription"].ToString();
                    //ViewState["BudgetUnitofMeasurementDescription"] = dtBudgetExpenseHeadDetail.Rows[0]["UnitofMeasurementDescription"].ToString();

                    if (txtIndentDetailItemUOM.Text == txtBudgetUnitofMeasurement.Text)
                    {
                        txtBudgetUnitofMeasurement.Visible = false;
                        lblBudgetUnitofMeasurement.Visible = false;
                        txtConversionFector.Text = "1";
                        txtConversionFector.Visible = false;
                    }
                    else
                    {
                        txtBudgetUnitofMeasurement.Visible = true;
                        lblBudgetUnitofMeasurement.Visible = true;
                        txtConversionFector.Text = "1";
                        txtConversionFector.Visible = true;
                    }

                    //lblBudgetUnitofMeasurement.Visible = true;
                    //txtBudgetUnitofMeasurement.Visible = true;
                }
                else
                {
                    txtBudgetUnitofMeasurement.Text = "";
                    txtConversionFector.Text = "0";

                    txtConversionFector.Visible = false;
                    lblBudgetUnitofMeasurement.Visible = false;
                    txtBudgetUnitofMeasurement.Visible = false;
                }
            }
        }

Web服务方法

[WebMethod]
        public CascadingDropDownNameValue[] GetBudgetReferenceHeadDetailListByBudgetExpenseHeadID(string knownCategoryValues, string category)
        {
            SMART.DAL.BMS.BudgetExpenseHeadDetail objBudgetExpenseHeadDetail = new SMART.DAL.BMS.BudgetExpenseHeadDetail();

            StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
            Int32 BudgetExpenseHeadID;
            if (!kv.ContainsKey("undefined") ||
            !Int32.TryParse(kv["undefined"],  out BudgetExpenseHeadID))
            {
                return null;
            }

            DataTable dt = objBudgetExpenseHeadDetail.SelectByBudgetExpenseHeadID(BudgetExpenseHeadID);

            //kv["Project"].ToString()
            List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
            int i = 0;
            foreach (DataRow dr in dt.Rows)
            {
                string BudgetReferenceID = dr["BudgetExpenseHeadDetailID"].ToString();
                string BudgetReferenceDescription = dr["BudgetExpenseHeadDetailDescription"].ToString();
                values.Add(new CascadingDropDownNameValue(BudgetReferenceDescription, BudgetReferenceID));
            }
            return values.ToArray();
        }

你能帮我做什么,这样它每次都能在所有浏览器中工作吗?我想我应该升级 ajaxtoolkit 这样就能解决问题。

我尝试在第一个下拉代码中添加一些参数自动回发,也尝试添加异步回发,但没有任何效果。现在我正在考虑升级ajaxtoolkit。也许在那之后它会解决我的问题。你能给我建议或建议来解决这个问题吗?

c# asp.net visual-studio-2008 ajaxcontroltoolkit cascadingdropdown
1个回答
0
投票

如果您确实确定您的 AjaxToolKit 版本是 3?

那么是的,我肯定会升级版本。

值得庆幸的是,DevExpress 的优秀人员维护了该工具包,实际上已经修复并添加了重大升级,其中包括 HTML5 支持。

最新版本为20.1或更高版本。那么,如果您真的使用的是版本 3?嗯,当 HTML5 出现时,我认为它还不存在。

请记住,如果您升级,则需要删除 AjaxScriptManager。

您现在不需要 2 个脚本管理器,并且 AJ 工具包已更改并升级为使用 asp.net ScriptManager。

这非常好,因为您因此不想或不需要或将要使用 AjaxToolKit 脚本管理器,这通常会导致给定网页中存在 2 个脚本管理器。

因此,您需要升级该软件包,这样所有现代浏览器都将支持。

您可以从这里下载 AJ 工具包:

https://www.devexpress.com/Products/AJAX-Control-Toolkit

或者您甚至可以使用 NugGet。

由于您当前的版本太旧,因此使用AJ工具包的页面需要删除AJ脚本管理器,您可以将asp:ScriptManger拖放到其位置。

我十多年前就接触到了 AJ 工具包,当时是 17 版,今天是 20 版。

我还应该指出,代码是开源的,源代码包含在 DevExpress 下载中。

© www.soinside.com 2019 - 2024. All rights reserved.