У меня есть веб-пользовательский контроль
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs"
Inherits="WebApplication5.WebUserControl1" %>
<asp:DropDownList ID="ddlnew" AutoPostBack="true" runat="server"
onselectedindexchanged="ddlnew_SelectedIndexChanged">
<asp:ListItem Text="text1" />
<asp:ListItem Text="text1" />
<asp:ListItem Text="text2" />
<asp:ListItem Text="text1" />
<asp:ListItem Text="text2" />
<asp:ListItem Text="text2" />
</asp:DropDownList>
и на странице Default.aspx
<asp:Button Text="PostBack" ID="btnPost" runat="server"
onclick="btnPost_Click" />
и на Default.aspx.cs
protected void btnPost_Click(object sender, EventArgs e)
{
WebUserControl1 uc = (WebUserControl1)Page.LoadControl("~/WebUserControl1.ascx");
PlaceHolder.Controls.Add(uc);
}
и когда мы выберем любой элемент из раскрывающегося списка, он будет возвращен обратно, а элемент управления скроется со страницы
пожалуйста, помогите, как можно предотвратить скрытие
спасибо
Динамически создаваемые элементы управления must be recreated on every postback
, когда вы понимаете, что каждый postback создает новый экземпляр класса Page
, и в этом случае вы должны каждый раз создавать все элементы управления, это становится более очевидным.
Еще одно сообщение об этом, на которое я ответил
Чтобы сохранить состояние между postbacks, вы можете использовать ViewState
или ControlState
protected void ddlnew_SelectedIndexChanged(object o, EventArgs e)
{
ViewState["ddlnew_value"]=ddlnew.selectdeitem;
}
чем на странице load pu this
If(IsPostBack)
{
if(ViewState["ddlnew_value"]!=null)
{
ddlnew.selecteditem=ViewState["ddlnew_value"];
}
}
это должно работать
В ASP.NET динамически загруженные элементы управления требуют небольшого внимания из-за их поведения через обратную передачу. Вы должны поддерживать ViewState для динамических элементов управления по обратной стороне или check that on which control is generating postback you will load the control or not..
Проверьте эти статьи (Специальная ссылка MSDN):
Обширная проверка пользовательских элементов управления - MSDN
Загрузка динамического пользователя UserControl в UpdatePanel
Поддерживать Viewstate для динамических элементов управления через обратную передачу
1) Вам нужно включить режим просмотра на странице.
2) Как и другие в этом сообщении, вам нужно воссоздать динамически загруженный пользовательский элемент управления.
Вот пример:
protected void Page_Load(object sender, EventArgs e)
{
Render();
}
Метод рендеринга:
private void Render()
{
var list = Helpers.Content.Lists.GetListByTitle();
if (list != null && list.Items.Count > 0)
{
this.divContainer.Controls.Clear();
var i = 1;
list.Items.ForEach(question =>
{
this.divContainer.Controls.Add(RenderQuestion(question, i));
i++;
});
}
}
Render Question Method:
private Control RenderQuestion(Entities.Modules.Item question, int count)
{
// Create question control
var q = (Custom.Widgets.ActionPlans.New.Question)LoadControl("~/Custom/Widgets/ActionPlans/New/Question.ascx");
// Render question
q.Render(question, count);
return q;
}
Надеюсь, что это поможет.
ViewState
илиControlState
- msdn.microsoft.com/en-us/library/1whwt1k7(v=VS.80).aspx