Обновление страницы asp.net из элемента управления в другом элементе управления - PullRequest
6 голосов
/ 26 января 2010

Я хочу обновить страницу asp.net после того, как кто-то нажмет кнопку «Добавить». Однако кнопка «Добавить» является частью пользовательского элемента управления внутри другого пользовательского элемента управления, и дочерний элемент управления и родительский элемент управления обернуты в панели обновления: приведенный ниже код обрезается для отображения, поэтому пользовательский элемент управления находится внутри другого пользовательского элемента управления

Внутри первого контроля:

<ajax:UpdatePanel ID="Panel1" runat="server" UpdateMode="Always">
   <ContentTemplate>
             <uc:Control2 ID="Custom2" runat="server" />
   </ContentTemplate>
</ajax:UpdatePanel>

Тогда внутри control2

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always">
   <ContentTemplate>
             <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton>
   </ContentTemplate>
</ajax:UpdatePanel>

Ответы [ 5 ]

5 голосов
/ 26 января 2010

Если вы хотите перезагрузить всю страницу (а не только содержимое UpdatePanels), вы можете сделать:

Page.Response.Redirect("mypagename.aspx");
1 голос
/ 26 января 2010

Предполагая, что у вас нет элемента управления родительского пользовательского элемента управления, вы можете найти элемент управления, выполнив поиск по дочерним элементам управления родительского элемента управления (FindControl). Затем, если у вас есть ссылка на него, вы можете добавить обработчик события:

btnAddButton.OnClick += new EventHandler(MethodThatRefreshesPage);

Поскольку вы находитесь на панелях обновления, вам нужно будет сделать что-то вроде Response.Redirect(Request.RawUrl), чтобы обновить всю страницу.

Конечно, если у вас есть контроль над родительским пользовательским элементом управления, вы создаете свое собственное событие "AddClicked" и передаете подписки вниз кнопке ссылки. Или вы можете просто выставить сам LinkButton как открытое свойство пользовательский контроль.

0 голосов
/ 26 января 2010

Вы не указываете конфигурацию диспетчера сценариев, однако при условии, что диспетчер сценариев настроен следующим образом:

<ajax:ScriptManager runat="server" ID="myScriptManager" EnablePartialRendering="true"></ajax:ScriptManager>

Затем добавьте этот триггер в шаблон UpdatePanel для Control2, чтобы он выглядел следующим образом:

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton>
    </ContentTemplate>
    <Triggers>
         <asp:PostBackTrigger ControlID="AddButton" />
    </Triggers>
 </ajax:UpdatePanel>

Это вызовет PostBack, который позволит вам перезагрузить любые связанные данные (в Page_Load), а также повторно отобразит всю страницу, а не только содержимое вашей внутренней панели обновления.

0 голосов
/ 26 января 2010

А как насчет событий (http://odetocode.com/code/94.aspx)?

0 голосов
/ 26 января 2010

Я предполагаю, что вы хотите обновить страницу, чтобы новый добавленный элемент отображался на странице ... правильно? если это так, то вы можете привязать данные к своему элементу управления данными как часть события AddButton_Click. Например, если у вас есть сетка, отображающая элементы, то пользователь нажимает кнопку «Добавить», чтобы добавить новый элемент, вы можете поместить следующий код в событие AddButton_Click, чтобы «обновить» содержимое элемента управления данными и отобразить вновь добавленные пункт:

protected void AddButton_Click(object sender, EventArgs e)
    {
       myGrid.DataBind();
    }

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

...