Динамически загруженный пользовательский веб-элемент управления скрывается при обратной передаче - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть пользовательский веб-элемент управления

<%@ 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);
    }

и когда мы выбираем любой элемент из выпадающего списка, он отправляется обратно, а элемент управления скрывается со страницы

так что помогите пожалуйста как это можно спрятать

спасибо

Ответы [ 4 ]

4 голосов
/ 30 ноября 2011

Динамически созданные элементы управления must be recreated on every postback, когда вы понимаете, что каждый постбэк создает новый экземпляр класса Page, и в этом экземпляре вы должны заново создавать все элементы управления каждый раз, это становится более очевидным.

Вот хорошая статья на этот счет

Еще один пост на этот вопрос, на который я ответил

И еще

Чтобы поддерживать состояние между обратными передачами, вы можете использовать ViewState или ControlState

Состояние управления MSDN и пример состояния просмотра

2 голосов
/ 30 ноября 2011
protected void ddlnew_SelectedIndexChanged(object o, EventArgs e)
{
  ViewState["ddlnew_value"]=ddlnew.selectdeitem; 
}

чем при загрузке страницы pu это

If(IsPostBack)
{
    if(ViewState["ddlnew_value"]!=null)
    {
        ddlnew.selecteditem=ViewState["ddlnew_value"];
    }
 }

это должно работать

1 голос
/ 30 ноября 2011

В ASP.NET динамически загружаемые элементы управления требуют некоторого внимания из-за их поведения при обратной передаче. Вы должны поддерживать Viewstate для динамических элементов управления через обратную передачу или check that on which control's is generating postback you will load the control or not..

Проверьте эти статьи (специально для MSDN):
Обширный анализ пользовательских элементов управления - MSDN
Динамическая загрузка UserControl в UpdatePanel
Ведение Viewstate для динамических элементов управления через обратную передачу

0 голосов
/ 09 апреля 2013

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++;
                               });
    }
}

Метод рендерного вопроса:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...