2009-06-15 3 views
0

J'ai une page ASP.NET avec 10 éléments LinkButton générés dynamiquement. Lorsqu'un utilisateur clique sur l'un de ces éléments LinkButton, je souhaite afficher son texte dans une boîte de dialogue modale. L'utilisateur peut alors changer le texte en entrant une valeur dans un TextBox. Mon code pour cela ressemble à ce qui suit:ASP.NET - Empêcher l'actualisation de page avec ModalPopupExtender

<asp:ScriptManager ID="theScriptManager" runat="server" /> 
<asp:UpdatePanel ID="myUpdatePanel" runat="server"> 
    <ContentTemplate> 
     <asp:Table ID="myTable" runat="server" OnInit="myTable_Init" CellPadding="10" CellSpacing="10" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:LinkButton ID="testLinkButton" runat="server" /> 
<cc1:ModalPopupExtender ID="myPopupExtender" runat="server" TargetControlID="testLinkButton" 
    OkControlID="okButton" PopupControlID="myPanel" /> 

<asp:Panel ID="myPanel" runat="server" Style="display: none;"> 
    <table border="1" cellpadding="0" cellspacing="0"><tr><td> 
     <table border="0" cellpadding="0" cellspacing="0" style="width: 300px;"> 
      <tr><td colspan="2" style="background-color: Blue; font-weight: bold; color: White;"> 
       &nbsp;Test 
      </td></tr> 
      <tr> 
       <td>You clicked <asp:TextBox ID="numTextBox" runat="server" MaxLength="3" />.</td> 
       <td align="right" style="padding-top: 5px; padding-bottom: 5px;"> 
        <asp:Button ID="okButton" runat="server" Text="OK" OnClick="okButton_Click" />&nbsp; 
       </td> 
      </tr> 
     </table> 
    </td></tr></table> 
</asp:Panel> 

Mon code-behind pour ce code ASP.NET se présente comme suit:

private LinkButton selectedLinkButton = null; 

protected void Page_Load(object sender, EventArgs e) 
{} 

protected void myTable_Init(object sender, EventArgs e) 
{ 
     TableRow row = new TableRow(); 
     for (int i = 1; i < 11; i++) 
     { 
      LinkButton linkButton = new LinkButton(); 
      linkButton.Text = i.ToString(); 
      linkButton.Click += new EventHandler(linkButton_Click); 
      linkButton.CommandArgument = i.ToString(); 

      AddLinkButtonToRow(linkButton, row); 
     } 
     myTable.Rows.Add(row); 

} 

protected void linkButton_Click(object sender, EventArgs e) 
{ 
    selectedLinkButton = (LinkButton)(sender); 
    numTextBox.Text = selectedLinkButton.CommandArgument; 

    myPopupExtender.Show(); 
} 

protected void okButton_Click(object sender, EventArgs e) 
{ 
    if (selectedLinkButton != null) 
    { 
     selectedLinkButton.Text = numTextBox.Text.Trim(); 
    } 
} 

private void AddLinkButtonToRow(LinkButton linkButton, TableRow row) 
{ 
    TableCell cell = new TableCell(); 
    cell.Controls.Add(linkButton); 
    row.Cells.Add(cell); 
} 

Mon problème est, je veux réduire le nombre de publications . Pour ce faire, j'ai décidé d'utiliser la boîte à outils ASP.NET AJAX. Malheureusement, je n'ai aucun succès avec la mise à jour du texte LinkButton une fois que l'utilisateur clique sur "OK" dans la boîte de dialogue. En outre, il semble que je reçois toujours des publications. Comment est-ce que je l'utilise incorrectement?

Merci,

Répondre

2

Par défaut, le UpdatePanel ne déclenche lorsque des objets à l'intérieur rafraîchit l'ont leurs différents événements déclenchés.

Vous devez soit déplacer votre ModalPopupExtender et le code dans le UpdatePanel, ou affecter un déclencheur de mise à jour qui est attaché à votre bouton Ok dans votre popup modal.

Si vous ne recevez toujours pas d'actualisation correcte, vous devrez peut-être ajouter une commande myUpdatePanel.Update() à votre code de bouton OK pour actualiser le panneau après avoir fourni le contenu de votre nouveau LinkButton.

0

L'ajout d'un déclencheur UpdatePanel pour mon bouton Close a permis à la page de ne pas effectuer une publication complète. Donc, ajouter un déclencheur pour votre bouton OK devrait faire la même chose.

Questions connexes