我对DropDownList回发有一个奇怪的问题。
我在asp.net母版页中有一个DropDownList,它包含一些状态名称,如:
drpTowns.DataSource = objTown.GetAllStates();
drpTowns.DataTextField = "Name";
drpTowns.DataValueField = "Id";
drpTowns.DataBind();
在母版页后面的代码中,我有一个DropDownList_SelectedIndexChanged事件,其中我在一个持有会话的变量中设置下拉列表的SelectedValue。如下所示
protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
}
Globals.DefaultTown的定义是用App_Code Globals.cs类编写的,如下所示:
private static int _defaultTown = Convert.ToInt32(ConfigurationManager.AppSettings["DefaultTown"]);
public static int DefaultTown
{
get
{
if (HttpContext.Current.Session["DefaultTown"] == null)
return _defaultTown;
else
return Convert.ToInt32(HttpContext.Current.Session["DefaultTown"]);
}
set
{
HttpContext.Current.Session["DefaultTown"] = value;
}
}
现在我想在内容页面(Default.aspx)中检索Globals.DefaultTown的值。我这样做就像下面这样:
Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
现在,只要我从下拉列表中选择状态,Globals.DefaultTown就不会立即更新,就像默认情况下为DefaultTown设置Selected State,但是当我从列表中选择第二个状态时,它仍会给出第一个id状态,现在当我从列表中选择第三个状态时,它给出第二个的id,当我从列表中选择第一个状态时,它给出第三个状态的id,即它不会在现场更新DefaultTown变量
任何人都可以告诉我这个
会出现什么问题答案 0 :(得分:1)
这是正常行为。当您选择下拉列表项时,它会回发,首先加载内容页面,然后运行:
Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
此处Globals.DefaultTown尚未改变。
然后转到rpTowns_SelectedIndexChanged方法并更改Globals.DefaultTown。
此页面可能有助于更好地理解:Events in ASP.NET Master and Content Pages。
解决方案:
1.如果没有副作用,您可以将代码移至母版页:
protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
}
2.或者您可以重定向到同一页面。在主页中:
protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
Response.Redirect(Request.RawUrl);
}
在内容页面中:
if (!IsPostBack)
{
Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
}