Мне нужно обновить Dropdowlist в соответствии с выбранными значениями в CheckBoxList, избегая перезагрузки страницы, я использую UpdatePanel.У dropdwonlist всегда должен быть AutoPostback, он всегда должен вызывать мой «SearchEvent»
. Я использовал UpdatePanel и AsyncPostBackTrigger в моем CheckBoxlist для вызова функции в коде позади, чтобы обновить dropdowlist.
Это работает только один раз.После первого вызова я не могу вызвать CheckBoxlist SelectedIndexChanged, вместо этого я получаю ошибку:
"Sys.WebForms.PageRequestManagerServerErrorException: при обработке запроса на сервере произошла неизвестная ошибка. Код состояния, возвращаемый серверомбыло: 404 "
Мой выпадающий список также теряет PostBack, ничего не происходит.
Просмотр ASPX:
<td>
<asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:CheckBoxList ID="IsActiveFilterCheck" runat="server" AutoPostBack="true" AppendDataBoundItems="true" CausesValidation="False">
<asp:ListItem Text="Active" Value="1" />
<asp:ListItem Text="Closed" Value="0" />
</asp:CheckBoxList>
</td>
<td>
<asp:UpdatePanel ID="UpdatePanel1" ChildrenAsTriggers="true" UpdateMode="Conditional" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="IsActiveFilterCheck" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<br /><br />
<asp:DropDownList ID="StatusFilterList" runat="server" DataTextField="Name" DataValueField="Id">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
</td>
Мой код:
private void Page_Load(object sender, System.EventArgs e)
{
RegisterCallbacks();
if (!IsPostBack)
{
Initialize();
}
}
override protected void OnInit(EventArgs e)
{
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
CheckProfil();
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.SearchButton.ServerClick += new System.EventHandler(this.SearchButton_ServerClick);
this.StatusFilterList.SelectedIndexChanged += new System.EventHandler(this.SearchButton_ServerClick);
this.IsActiveFilterCheck.SelectedIndexChanged += new System.EventHandler(this.IsActiveFilterCheck_Changed);
this.Load += new System.EventHandler(this.Page_Load);
}
protected void IsActiveFilterCheck_Changed(object sender, EventArgs e)
{
// Update the Status Filter List
StatusFilterList.Items.Clear();
if (IsActiveFilterCheck.Items.Cast<ListItem>().Where(li => li.Selected).ToList().Count != 1)
{
BindListInsertAll(StatusFilterList, ExpectedStatusCollection.Instance.GetAll());
}
else
{
IList statusSelected = ExpectedStatusCollection.Instance
.GetAll().Cast<ExpectedStatusDo>()
.Where(exp => IsActiveFilterCheck.SelectedValue == "1" ? exp.Id != 5 && exp.Id != 6 : exp.Id == 5 || exp.Id == 6)
.ToList(); // Only Dead and Signed
// Update the Status
BindListInsertAll(StatusFilterList, statusSelected);
}
UpdatePanel1.Update();
//FindByFilter();
}
Когда я изменяю флажок IsActiveFilterCheck , мне нужно обновить только StatusFilterList , как показано в функции IsActiveFilterCheck_Changed , без перезагрузки полной страницы.
Этот StatusFilterList всегда должен вызывать / запускать событие SearchButton_ServerClick
Прямо сейчас. Это работает только один раз, когда срабатывает IsActiveFilterCheck мой список раскрывающихся списков обновляется, но после того, как я нажимаю в любом месте, я получаю сообщение об ошибке и не могу вызвать IsActiveFilterCheck