开发者

What is the effect of IsPostBack Condition?

开发者 https://www.devze.com 2023-03-19 00:08 出处:网络
I have a aspx Page where I am using AJAX. like <asp:UpdatePanel runat=\"server\" ID=\"upPanelDDLProgram\">

I have a aspx Page where I am using AJAX. like

<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> 

and my code behind is like

    protected void Page_Load(object sender, EventArgs e)
    {
        //if (!IsPostBack)
        //{
        //    BindProgramDDL();
        //}
        BindProgramDDL();
    }

    protected void BindProgramDDL()
    {
        List<CcProgramEntity> programEntities = FormSale开发者_如何学CSubmit_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;
    }

the If condition is the page load event, is commented out. If I toggle the comment part of the page load event, it works perfect in both cases. My question is why is this heppening?


IsPostBack tells you if it is a second request to the page. The benefit here is if you need to do anything costly, such as a database call to fill a dropdownlist or similar, you can do it when !IsPostback, then use ViewState to retain the values.

To put it specific to your situation

Using:

if (!IsPostBack)
{
    BindProgramDDL();
}

Will result in BindProgramDDL being called ONLY on the first time the page is loaded, all AJAX or other user interaction with the page will NOT call BindProgramDDL;

Without that, in place EVERY page load would call the method, un-necessarily hitting the database for the records.


If I am getting you correct .......

DropDown list has data even you are not binding it second time after post back..........its becasuse its server side control and each serverside control has its view state with it thats y its not removing data.

IsPostBack - it true when do the post back by using serverside control like dropdown, checkbox , textbox............When you load page first time this property is false but in subsequent request to same page value of this property is true. you can check msdn document for more detail about it.


It's basically saying are you visiting the page for the first time (not a post back), or has the user clicked on a control (a post back).

Useful for when you only want to run methods once when the page is initially loaded

You're code should probably look like this to achieve best results

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindProgramDDL();
    }
}


I suspect that the DropDownList saves the items in the ViewState and then work with them during all subsequesnt requests. That is why your code works even if the editor's DataSource is set only when IsPostBack returns false.


PostBack event appears on every action (ajax too), except of first page load.


Page.IsPostBack

indicates whether the page is being rendered for the first time or is being loaded in response to a postback.

see http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx

Since you've bound your datasource the first time the page was loaded, the data are still in the viewstate and you don't need to update the control (unless the datasource has changed).

Take also into account that, since you're using ajax, you may also want to intercept if there was an 'asynchronous postback'. See http://encosia.com/are-you-making-these-3-common-aspnet-ajax-mistakes/

0

精彩评论

暂无评论...
验证码 换一张
取 消