Ответ 1
Я испытал нечто похожее и должен был реализовать обходной путь, используя событие Page_PreRender, чтобы преодолеть его.
В вашем случае вы можете проверить, запущен ли PopulateItems(), и если он не запускается в предварительном рендеринге.
Есть ли причина, по которой завершение и перезапуск сеанса ASP.NET будет мешать (предотвращать) запуск события SelectedIndexChanged в раскрывающемся списке?
Форма отправляется обратно, но моя точка останова не попадает?
Все работает отлично до перезапуска сеанса.
Здесь asp для управления:
<asp:DropDownList ID="dlSort" runat="server" AutoPostBack="true"
onselectedindexchanged="dlSort_SelectedIndexChanged">
</asp:DropDownList>
Здесь часть кода:
protected void dlSort_SelectedIndexChanged(object sender, EventArgs e)
{
PopulateItems();
//Breakpoint above- not hit after session restarts, but hit prior to session end.
}
У меня оставлена пустая форма, так как она не заселяется...
Спасибо заранее,
M
Изменить 1:
Вот код, в котором заполняется элемент управления:
protected void Page_Load(object sender, EventArgs e)
{
Form.Action = Request.RawUrl;//Required as page is rewritten
if (!IsPostBack)
{
SetNoItemsMessage("");
PopulateSortDropDown();
PopulateItems();
}
}
private void PopulateSortDropDown()
{
clsProducts ops = new clsProducts();
DataTable dt = ops.GetProductSortDropDownData();
dlSortBy.DataSource = dt;
dlSortBy.DataBind();
dlSortBy.ClearSelection();
dlSortBy.SelectedValue = "1";
}
Изменить 2:
Чтобы уточнить, метод PopulateItems() заполняет ретранслятор данных и должен запускаться при изменении индекса сортировки (dlSort_SelectedIndexChanged) - этого не происходит, хотя происходит обратная передача.
Page_Load выполняет метод, который заполняет dlSort, это всегда выполняется.
Я просмотрел страницу широко и все, кроме события изменения индекса, срабатывает.
Изменить 3:
void Session_Start(object sender, EventArgs e)
{
InitialiseCommonSessionVariables();//This piece of code sets default values for session variables that are used in every case.
}
Я испытал нечто похожее и должен был реализовать обходной путь, используя событие Page_PreRender, чтобы преодолеть его.
В вашем случае вы можете проверить, запущен ли PopulateItems(), и если он не запускается в предварительном рендеринге.
Я думаю, что причина может заключаться в настройках аутентификации. После истечения срока действия вашей учетной записи вы можете перейти на страницу входа в систему из-за reset аутентификации.
И даже перенаправление может быть сделано прозрачно, после перенаправления на страницу входа в систему вы потеряете все параметры Post, указанные в последнем запросе после обратной связи.
Это означает, что ASP.NET не сможет определить, какой элемент управления активировал пост-обратно (он полагается на параметр EVENTTARGET) и, следовательно, не будет запускать событие SelectedIndexChanged.
ASP.Net Code :
---------------
<asp:DropDownList ID="ddList" runat="server" AutoPostBack="True" Height="65px" OnSelectedIndexChanged="ddList_SelectedIndexChanged" Width="198px">
</asp:DropDownList>
C# Code :
---------
public void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dropdown();
}
}
.
<your code goes here> ....
public void dropdown()
{
//String Sql statement
string Sqlstr = "select CountryCode,Description from ca_countryMaster order by description";
string DBCon = "Data Source=RAJA;Initial Catalog=CareHMS;Integrated Security=True;";
SqlConnection SqlCon = new SqlConnection(DBCon);
SqlCon.Open();
SqlDataAdapter Sqlda = new SqlDataAdapter(Sqlstr, SqlCon);
DataSet ds = new DataSet();
Sqlda.Fill(ds);
ddList.DataSource = ds.Tables[0];
ddList.DataTextField = "Description";
ddList.DataValueField = "CountryCode";
ddList.DataBind();
ds.Dispose();
Sqlda.Dispose();
SqlCon.Close();
}