2013-08-02 3 views
0

Я пытаюсь понять UpdatePanels и передовой опыт их использования.Понимание UpdatePanels

Я использую .Net4.0 с VB.Net.

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

<asp:UpdatePanel runat="server"> 
<ContentTemplate> 

    <h2>Conversation</h2> 
    <p><asp:Literal ID="lit1" runat="server" /></p> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 

</ContentTemplate> 
</asp:UpdatePanel> 

Convo.ascx.vb

Partial Class Convo 
Inherits System.Web.UI.UserControl 

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    lit1.Text = lit1.Text & "<p>" & TextBox1.Text & "</p>" 
End Sub 

End Class 

На странице загрузки (Default.aspx) У меня есть:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"  Inherits="_Default" %> 

<%@ Reference Control="~/Convo.ascx" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
    <asp:scriptmanager ID="Scriptmanager1" runat="server"></asp:scriptmanager> 

<div> 
    <asp:UpdatePanel runat="server"> 
     <ContentTemplate> 
      <asp:Button ID="Button1" runat="server" Text="Add Conversation" /> 
      <asp:PlaceHolder ID="phConversation" runat="server"> 
      </asp:PlaceHolder> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
</form> 
</body> 
</html> 

С Codebehind Default.aspx.vb в

Partial Class _Default 
Inherits System.Web.UI.Page 

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    AddConvo() 
End Sub 

Private Sub AddConvo() 
    Dim getPh As New PlaceHolder 
    getPh = CType(Me.FindControl("phConversation"), PlaceHolder) 
    Dim ucConvo As New Convo 
    ucConvo = CType(LoadControl("~/Convo.ascx"), Convo) 
    getPh.Controls.Add(ucConvo) 
End Sub 

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    AddConvo() 
End Sub 
End Class 

Таким образом, Convo, я добавляю OnLoad, остается на странице после того, как добавлено, добавлено, добавлено какое-либо добавление после того, как загрузка исчезла после нажатия кнопки на Convo.

Так что мой вопрос в том, как я могу добавить и оставить? В конце концов они будут добавлены в базу данных, но прямо сейчас я пытаюсь понять UpdatePanels, поскольку они станут основой для этого приложения.

Есть ли очень хорошее объяснение многоцелевых UpdatePanels в любом месте?

Заранее спасибо

PS, им в hobbiest так только VB ответы, пожалуйста

ответ

1

Вопрос на самом деле не с UpdatePanel, но с ASP.NET. Веб-формы ASP.NET используют иерархию управления для всей страницы, и вы добавляете элементы управления в иерархию «динамически». Поскольку вы делаете это таким образом, ASP.NET требует, чтобы вы добавили элемент управления обратно в иерархию элементов управления при каждой обратной передаче на сервер. UpdatePanel - это способ отправить сообщение на сервер, и поэтому вы должны повторно добавить старые пользовательские элементы управления и новые в эту иерархию.

По существу, UpdatePanel был добавлен, чтобы сделать AJAX простым, но вам все равно придется работать в рамках правил ASP.NET.

+0

Спасибо Брайан, поэтому вопрос, как я могу гарантировать, что эти элементы управления возвращаются после каждой обратной передачи, когда количество разговоров неизвестно? –

+0

Это сложная часть, хотя если у вас есть счетчик, который вы храните в viewstate '(LoadControl (" .. "); ViewState [" Counter "] + = 1;', вы можете ссылаться на это. восстановите свой viewstate для каждого элемента управления, пока вы добавляете их во время фазы инициализации. –

+0

Делает это сложным для меня, но имеет обходное решение, используя только одну UpdatePanel –

Смежные вопросы