我有一个aspx页面,在那里我使用AJAX。喜欢
<asp:UpdatePanel runat="server" ID="upPanelDDLProgram">
<ContentTemplate>
<asp:DropDownList ID="DDLProgram" runat="server" Width="194px" Height="18px" OnSelectedIndexChanged="OnDDLProgramChanged" AutoPostBack="true">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel> 我后面的代码是这样的
protected void Page_Load(object sender, EventArgs e)
{
//if (!IsPostBack)
//{
// BindProgramDDL();
//}
BindProgramDDL();
}
protected void BindProgramDDL()
{
List<CcProgramEntity> programEntities = FormSaleSubmit_BAO.GetAllPrograms();
DDLProgram.DataSource = programEntities;
DDLProgram.DataTextField = "Shortname";
DDLProgram.DataValueField = "Id";
DDLProgram.DataBind();
string programCode = programEntities[DDLProgram.SelectedIndex].Code;
}
protected void OnDDLProgramChanged(object sender, EventArgs e)
{
List<CcProgramEntity> programEntities = FormSaleSubmit_BAO.GetAllPrograms();
string programCode = programEntities[DDLProgram.SelectedIndex].Code;
}If条件是页面加载事件,被注释掉。如果我切换页面加载事件的注释部分,它在这两种情况下都能完美地工作。我的问题是,为什么会出现这种情况?
发布于 2011-07-07 15:21:40
如果我没弄错的话......
DropDown列表有数据,即使你在post back..........its 之后没有第二次绑定它,因为使用了它的服务器端控件,并且每个服务器端控件都有它的视图状态,这就是说它不会删除数据。
IsPostBack -当使用dropdown、checkbox、textbox............When等服务器端控件回发时,该属性为false,但在后续对相同页面的请求中,该属性的值为true。您可以查看msdn文档以了解有关它的更多细节。
发布于 2011-07-07 15:20:56
IsPostBack会告诉您这是否是对页面的第二次请求。这里的好处是,如果你需要做任何开销很大的事情,比如一个数据库调用来填充一个下拉列表或类似的东西,你可以在!IsPostback时做,然后使用ViewState来保留这些值。
具体来说就是你的情况
使用:
if (!IsPostBack)
{
BindProgramDDL();
}将导致仅在第一次加载页面时调用BindProgramDDL,所有AJAX或其他用户与页面的交互都不会调用BindProgramDDL;
否则,每次页面加载都会调用该方法,从而不必要地访问数据库中的记录。
发布于 2011-07-07 15:20:46
它基本上是说你是第一次访问这个页面(不是回帖),还是用户点击了一个控件(回帖)。
在最初加载页面时只想运行一次方法时非常有用
您的代码可能应该看起来像这样才能获得最佳结果
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindProgramDDL();
}
}https://stackoverflow.com/questions/6607135
复制相似问题