2013-10-23 24 views
5

Mam aplikację internetową asp.net. Na mojej stronie .aspx mam panel aktualizacji, w którym mam 3 asp:LinkButton, który powinien wywołać kod C# z tyłu. Problem polega na tym, że onclick nie działa.asp.net linkbutton w updatepanelu nie uruchamia się

Oto jak wygląda kod:

<div id="div1"> 
       <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
        <ContentTemplate> 
         <ul> 
          <li><asp:LinkButton ID="lnk_1" runat="server" OnClick="lnk1_Click">Link1</asp:LinkButton></li> 
          <li><asp:LinkButton ID="lnk_2" runat="server" OnClick="lnk2_Click">Link2</asp:LinkButton></li> 
          <li><asp:LinkButton ID="lnk_3" runat="server" OnClick="lnk3_Click">Link3</asp:LinkButton></li> 
         </ul> 
<div> some more code here </div> 
</ContentTemplate> 
        <Triggers> 
         <asp:PostBackTrigger ControlID="lnk_1" /> 
         <asp:PostBackTrigger ControlID="lnk_2" /> 
         <asp:PostBackTrigger ControlID="lnk_3" /> 
        </Triggers> 
       </asp:UpdatePanel> 
      </div> 

Co jest nie tak z tym kodem? Próbowałem również używać AsyncPostBackTrigger, ale nadal nie działa.

Kod z tyłu nie jest w ogóle wywoływany.

Próbowałem również wyszukiwać w Google, ale nie mogłem znaleźć rozwiązania.

Odpowiedz

5

Jesteś bardzo blisko. Kilka rzeczy:

  • Twoje wyzwalacze powinien być AsyncPostBackTriggers jak mówiłeś, że próbowałeś.
  • Twoje wyzwalacze wymagają nazwy zdarzenia.
  • Sugestia: Nie przeszkadza to wystrzeliwaniu wydarzeń, ale jeśli nie chcesz, aby KAŻDY postowalne zdarzenie powodowało odświeżenie, dodaj parametr UpdateMode = "Warunkowo" do swojego UpdatePanel.

Oto działający przykład.

Web Form - WebForm1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="AspDotNetStorefront.WebForm1" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title></title> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
      <asp:ScriptManager runat="server"></asp:ScriptManager> 
      <div id="div1"> 
       <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
        <ContentTemplate> 
         <ul> 
          <li><asp:LinkButton ID="lnk_1" runat="server" OnClick="lnk1_Click">Never clicked</asp:LinkButton></li> 
         </ul> 
        </ContentTemplate> 
        <Triggers> 
         <asp:AsyncPostBackTrigger ControlID="lnk_1" EventName="Click" /> 
        </Triggers> 
       </asp:UpdatePanel> 
      </div>  
     </form> 
    </body> 
</html> 

kodzie - WebForm1.aspx.cs:

using System; 

namespace AspDotNetStorefront 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     private static int _clickedCount = 0; 

     protected void lnk1_Click(object sender, EventArgs e) 
     { 
      ++_clickedCount; 
      var suffix = _clickedCount <= 1 ? "time" : "times"; 
      lnk_1.Text = string.Format("Clicked {0} {1}", _clickedCount, suffix); 
     } 
    } 
}