我最近加入了新公司,他们在 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。也许在那之后它会解决我的问题。你能给我建议或建议来解决这个问题吗?
如果您确实确定您的 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 下载中。