modalpopupextender with dropdownlist and update panel issue

1.3k Views Asked by At

I have asp:DetailsView in popup (I use modalpopupextender) and I have dropdownlist inside detailsview with autopostback. DetailView is inside updatepanel. But when I change value of dropdownlist the PageLoad function is called anyway, and dropdown index changes to 0.

<asp:Button ID="FakeClickButton5" runat="server" Text="FakeButton" CssClass="hideButton" />

 <asp:Panel ID="PopupPanelDetail" runat="server" CssClass="modalPopup" >
    <asp:Panel ID="Panel6" runat="server"  >

    <asp:UpdatePanel ID="uptblTest" UpdateMode="Conditional"  runat="server">
    <ContentTemplate>
            <asp:DetailsView ID="DetailsViewMain" runat="server" AutoGenerateRows="false" 
                DataKeyNames="Id" DataSourceID="ObjectDataSourceDetailMain" Height="50px" 
                onitemcommand="DetailsViewMain_ItemCommand" 
                oniteminserted="DetailsViewMain_ItemInserted" 
                Width="250px"   >
                <Fields>
                    <asp:BoundField DataField="Id" HeaderText="Id" 
                        InsertVisible="False" ReadOnly="True" SortExpression="Id" 
                        Visible="False" />
                    <asp:BoundField DataField="name" HeaderText="name" 
                        SortExpression="name" />

                    <asp:TemplateField HeaderText="Type">
                        <ItemTemplate>
                            <asp:DropDownList ID="ddType" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddType_OnSelectedIndexChanged" onload="ddType_Load">
                            </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>

                    <asp:CommandField ShowEditButton="True" ShowInsertButton="True" 
                        Visible="False" />
                </Fields>
                <HeaderStyle CssClass="bold" HorizontalAlign="Center"></HeaderStyle>

            </asp:DetailsView>
    &nbsp;
            <asp:Panel ID="Panel7" runat="server">
                &nbsp;<asp:LinkButton ID="SaveDetailLinkButton" runat="server" CausesValidation="True"
                    onclick="SaveDetailLinkButton_Click" SkinID="blackButton" ValidationGroup="ServiceValidation">Save</asp:LinkButton>
                &nbsp;<asp:LinkButton ID="CancelDetailLinkButton3" runat="server" 
                    onclick="CancelDetailLinkButton3_Click" SkinID="blackButton">Cancel</asp:LinkButton>
            </asp:Panel>
        <asp:ObjectDataSource ID="ObjectDataSourceDetailMain" runat="server" 
            InsertMethod="InsertParam" 
            SelectMethod="GetParamByID" 
            UpdateMethod="UpdateParam" 
            TypeName="DatasorceMatch" 
            DataObjectTypeName="ParamCustom"
            OldValuesParameterFormatString="original_{0}" 
            oninserting="ObjectDataSourceDetailMain_Inserting" >
            <SelectParameters>
                <asp:ControlParameter ControlID="GridViewParams" Name="Id" 
                    PropertyName="SelectedDataKey.Value" Type="Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>


        </ContentTemplate>
        </asp:UpdatePanel>


   </asp:Panel>
</asp:Panel>


<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtenderDetails" runat="server" 
    PopupControlID="PopupPanelDetail"  TargetControlID="FakeClickButton2"    
    BackgroundCssClass="modalBackground" />

actually it's strange that dropdownlist reloaded because update panel mode is conditional and I don't update it in code.

Here is my server code:

protected void Page_Load(object sender, EventArgs e)
    {

    }

protected void DetailsViewMain_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    {
        if (e.CommandName == "Cancel")
        {
            DetailsViewMain.Visible = false;
        }
    }
    protected void DetailsViewMain_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        GridViewParams.DataBind();
        DetailsViewMain.Visible = false;
    }
    protected void SaveDetailLinkButton_Click(object sender, EventArgs e)
    {
        Page.Validate();
        if (Page.IsValid)
        {
            GridViewParams.SelectedIndex = -1;
            if (DetailsViewMain.CurrentMode == DetailsViewMode.Edit)
            {
                DetailsViewMain.UpdateItem(true);

            }
            if (DetailsViewMain.CurrentMode == DetailsViewMode.Insert)
            {
                DetailsViewMain.InsertItem(true);

            }
            ModalPopupExtenderDetails.Hide();


            GridViewParams.DataBind();
        }
        else
        {
            ModalPopupExtenderDetails.Show();
        }
    }
    protected void CancelDetailLinkButton3_Click(object sender, EventArgs e)
    {
        ModalPopupExtenderDetails.Hide();
        GridViewParams.SelectedIndex = -1;
        GridViewParams.DataBind();
    }

    protected void ObjectDataSourceDetailMain_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
    {
        //int selectedID_ofType = (int)ViewState[viewState_typeID];
        int selectedID_ofType = int.Parse(dropDownList_ddType.SelectedValue);
        ((ParamCustom)e.InputParameters[0]).typeID = selectedID_ofType;
    }

    protected void ddType_Load(object sender, EventArgs e)
    {
        dropDownList_ddType = (DropDownList)sender;
        if (DetailsViewMain.CurrentMode == DetailsViewMode.Insert)
        {
            ((DropDownList)sender).Items.Clear();
            ((DropDownList)sender).Items.Add(new ListItem(@"Choose", (0).ToString()));
            foreach (ParamType paramType in DBHelper.sharedInstance().getAllParamTypes())
            {
                ListItem listItem = new ListItem(paramType.name, paramType.id.ToString());
                ((DropDownList)sender).Items.Add(listItem);
            }
        }
    }

    protected void ddType_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        //int selectedID_ofType = int.Parse(((DropDownList)sender).SelectedValue);
        //ViewState[viewState_typeID] = selectedID_ofType;
    }

What I need is just to change values of dropdownlist without page reloading or without popup disappearing and save this value.

0

There are 0 best solutions below