選択に基づいてデータを取得するために自動ポストバックに設定されているマスター ページに ddl があります。リスト内の値は customerids であり、セッション変数として設定されており、誰かがいずれかを選択すると、コードは session["selectedCustomer"] を参照し、適切なフィールドに入力します。今私が遭遇した問題は、Chrome または IE で自動ポストバックが実行されると、フィールドにデータが入力され、選択された顧客がデフォルトに戻されることです。ポストバック後のFirefoxでは、フィールドにデータが入力され、ドロップダウンリストは選択した顧客にとどまります。
protected void ddlSelectedCustomer_SelectedIndexChanged(object sender, EventArgs e)
{
CustomerSelected();
Response.AppendHeader("Refresh", "0; URL=" + this.ResolveUrl("~/AcesSetup/storefront.aspx"));
try
{
ViewState["SelectedAccordionIndex"] = ((AjaxControlToolkit.Accordion)FindControl("MyAccordion")).SelectedIndex;
}
catch (Exception ex)
{ }
}
それは私のddlのselectedChangedイベントです
private void CustomerSelected()
{
//clear the session variable
Session.Remove("selectedCustomer");
//user selected customer
if (ddlSelectedCustomer.SelectedIndex != -1)
{
Session["selectedCustomer"] = ddlSelectedCustomer.SelectedValue;
}
}
private void fillCustomers()
{
//save the value of the current selection to reselect later if still exists
string origSelectedItem = ddlSelectedCustomer.SelectedValue;
//check what role the user is in
string usersRole = Roles.GetRolesForUser(Membership.GetUser().UserName)[0];
MembershipUser user = Membership.GetUser();
switch (usersRole)
{
case "SalesRep":
ddlSelectedCustomer.DataSource = DAL.Util.getSalesRepCustomers((Guid)user.ProviderUserKey);
ddlSelectedCustomer.DataBind();
break;
case "BasicUser":
case "Customer":
ddlSelectedCustomer.DataSource = DAL.Util.getCustomersListForUser((Guid)user.ProviderUserKey);
ddlSelectedCustomer.DataBind();
break;
case "Admin":
case "SuperAdmin":
ddlSelectedCustomer.DataSource = DAL.Util.getAllCustomersList();
ddlSelectedCustomer.DataBind();
break;
default:
break;
}
//if user had a company selected, reselect it if it exists
if (origSelectedItem != string.Empty)
ddlSelectedCustomer.SelectedValue = origSelectedItem;
else if (ddlSelectedCustomer.Items.Count == 1)
{
//if only one item in the list, select it
ddlSelectedCustomer.Items[0].Selected = true;
}
これがドロップダウンリストに入力されます。また、Firefox がポスト バックを行うと、ページ全体がリロードされないように見えます。Chrome または IE では、ページ全体が白く点滅してリロードされます。Firefox では、アコーディオン用に持っているビューステートが想定どおりに機能するためですが、Chrome や IE ではそうではありません。
何かお役に立てれば幸いです。解決できることがあれば、または提供できるコード スニペットがあれば、すべてを更新するために最善を尽くします。
ありがとうございました。