i have a panel within an update panel in my page visible of panel is false by default and after asynchronous postback changes to true my problem is after postback location of panel change to top of page here is my code
<asp:Label runat="server" ID="lbl_caption_upload" Text="caption" CssClass="label"></asp:Label>
<asp:TextBox runat="server" ID="txt_caption_upload" TextMode="MultiLine" CssClass="textbox"></asp:TextBox>
<asp:RadioButtonList runat="server" ID="radio_view_upload" OnSelectedIndexChanged="radio_view_upload_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem text="custom"></asp:ListItem>
<asp:ListItem text="public"></asp:ListItem></asp:RadioButtonList>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="radio_view_upload" />
</Triggers>
<ContentTemplate>
<asp:Panel runat="server" ID="placeholder_panel" Visible="false" CssClass="hide">
<tr>
<td>
<asp:Label runat="server" ID="lbl_genre_upload" Text="genre" CssClass="label"></asp:Label>
</td>
<td>
<asp:CheckBoxList runat="server" ID="check_genre_upload" DataTextField="Title" DataValueField="ID" RepeatColumns="7" RepeatDirection="Horizontal" DataSourceID="datasource_genre_upload"></asp:CheckBoxList>
<asp:LinqDataSource ID="datasource_genre_upload" runat="server" ContextTypeName="Video_Hosting.L2SDataContext" EntityTypeName="" Select="new (Title, ID)" TableName="Genres" OrderBy="ID">
</asp:LinqDataSource>
</td>
</tr>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
and here is code for slectedindex change
protected void radio_view_upload_SelectedIndexChanged(object sender, EventArgs e)
{
if (radio_view_upload.SelectedIndex == 1)
{
placeholder_panel.Visible = true;
}
else
{
placeholder_panel.Visible = false;
}
}
after postback location of panel change to before first label
thanks for all of your answers
This line is the problem:
if (radio_view_upload.SelectedIndex == 2)
Your radio_view_upload
RadioButtonList only has 2 choices, so your if-statement will always go to the Else part. Only SelectedIndex 0 and 1 are available.
In most programming languages the first item in an array, collection, list etc will have 0 as starting index.
You could also use if (radio_view_upload.SelectedValue == "myValue")
, but for this to work you have to add a value="myValue"
to the ListItems.
UPDATE
Inside <ContentTemplate>
you have a <tr> <td>
and a </td> </tr>
without matching <table> </table>
tags. Maybe those tags are outside the UpdatePanel and not visible in your snippet. You should add/move those inside the UpdatePanel.
UPDATE 2
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<br />
<asp:Label runat="server" ID="lbl_caption_upload" Text="caption" CssClass="label"></asp:Label>
<br />
<asp:TextBox runat="server" ID="txt_caption_upload" TextMode="MultiLine" CssClass="textbox"></asp:TextBox>
<br />
<asp:RadioButtonList runat="server" ID="radio_view_upload" OnSelectedIndexChanged="radio_view_upload_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Text="custom"></asp:ListItem>
<asp:ListItem Text="public"></asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="radio_view_upload" />
</Triggers>
<ContentTemplate>
<asp:Panel runat="server" ID="placeholder_panel" Visible="true" CssClass="hide">
<asp:Label runat="server" ID="lbl_genre_upload" Text="genre" CssClass="label"></asp:Label>
<br />
<asp:CheckBoxList runat="server" ID="check_genre_upload" DataTextField="Title" DataValueField="ID" RepeatColumns="7" RepeatDirection="Horizontal"></asp:CheckBoxList>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>