我有一个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条件是页面加载事件,被注释掉。如果我切换页面加载事件的注释部分,它在两种情况下都是完美的。我的问题是为什么会这样呢?
答案 0 :(得分:3)
IsPostBack
会告诉您它是否是对该页面的第二次请求。这里的好处是,如果您需要执行任何代价高昂的操作,例如数据库调用以填充下拉列表或类似内容,您可以在!IsPostback
时执行此操作,然后使用ViewState保留值。
根据您的情况具体说明
使用:
if (!IsPostBack)
{
BindProgramDDL();
}
将导致在第一次加载页面时仅调用BindProgramDDL,所有AJAX或其他用户与页面的交互都不会调用BindProgramDDL;
如果不这样做,每个页面加载就会调用该方法,不一定会在数据库中找到记录。
答案 1 :(得分:1)
如果我让你纠正.......
DropDown列表有数据,即使你没有在回发后第二次绑定它..........它的因为它的服务器端控制而且每个服务器端控件都有它的视图状态那就是它没有删除数据。
IsPostBack - 通过使用服务器端控件(如下拉列表,复选框,文本框)进行回发时确实如此............当您第一次加载页面时此属性为false但在后续请求中此属性的相同页面值为true。您可以查看msdn文档以获取更多相关信息。
答案 2 :(得分:0)
它基本上是说你是第一次访问该页面(不是回帖),或者是用户点击了一个控件(回帖)。
当您只想在最初加载页面时运行一次方法
时非常有用您的代码应该看起来像这样才能获得最佳效果
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindProgramDDL();
}
}
答案 3 :(得分:0)
我怀疑DropDownList会将项目保存在ViewState中,然后在所有后续请求中使用它们。这就是为什么即使仅在IsPostBack返回false时才设置编辑器的DataSource,您的代码仍然有效。
答案 4 :(得分:0)
PostBack
事件。
答案 5 :(得分:0)
Page.IsPostBack
表示页面是第一次呈现还是正在加载以响应回发。
请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx
由于您在第一次加载页面时绑定了数据源,因此数据仍在视图状态中,您无需更新控件(除非数据源已更改)。
还要考虑到,由于您使用的是ajax,因此如果存在“异步回发”,您可能还需要拦截。 见http://encosia.com/are-you-making-these-3-common-aspnet-ajax-mistakes/