2016-02-05 17 views
5

Tworzę projekt w ASP.NET (Framework 4.0). Użyłem Asp LinkButton w Master Strona & ma 2 strony powiązane z nim (Home.aspx & service.aspx).LinkButton na stronie wzorcowej nie uruchamia się na drugiej stronie podrzędnej w ASP.NET

Pytanie Następujące: LinkButton1 działa na Home.aspx i nie działa na service.aspx.

kod User.master jak postępować

kod
<ul class="nav navbar-nav navbar-right"> 
    <li> 
     <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click" AutoPostBack="true">Signout 
      <i class="glyphicon glyphicon-off"></i> 
     </asp:LinkButton> 
    </li> 
    <li class="dropdown"> 
     <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
      <span> 
       <asp:Label ID="lblName" runat="server" Text=""></asp:Label> 
      </span> 
      <i class="icon-user fa"></i> 
      <i class=" icon-down-open-big fa"></i> 
     </a> 
     <ul class="dropdown-menu user-menu"> 
      <li class="active"> 
       <a href="frmUserHome.aspx"> 
        <i class="icon-home"></i> My Account 
       </a> 
      </li> 
      <li > 
       <a href="frmUserHome.aspx"> 
        <i class="icon-home"></i> Personal Home 
       </a> 
      </li> 
      <li> 
       <a href="#"> 
        <i class="icon-hourglass"></i> Pending approval 
       </a> 
      </li> 
     </ul> 
    </li> 
</ul> 

User.master.cs dla LinkButton1 Kliknij

protected void LinkButton1_Click(object sender, EventArgs e) 
    { 

     if (Request.Cookies["ASP.NET_SessionId"] != null) 
     { 
      Response.Cookies["ASP.NET_SessionId"].Value = string.Empty; 
      Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20); 
     } 
     FormsAuthentication.SignOut(); 
     Session.Abandon(); 
     Response.Redirect("~/Default.aspx"); 
    } 

Podczas inspekcji elementu (przy użyciu Chrome Browser) na stronie Home.aspx znalazłem poniżej kod

<li> 
    <a id="ctl00_LinkButton1" autopostback="true" href="javascript:__doPostBack('ctl00$LinkButton1','')">Signout 
     <i class="glyphicon glyphicon-off"></i> 
    </a> 
</li> 

i podczas service.aspx (Chrom Przeglądarka kontrolować pozycję)

<li> 
    <a id="ctl00_LinkButton1" autopostback="true" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$LinkButton1", "", true, "", "", false, true))'>Signout 
     <i class="glyphicon glyphicon-off"></i> 
    </a> 
</li> 

Dlaczego ich jest różnica między Home.aspx & service.aspx (podczas inspekcji elementu poprzez przeglądarkę Chrome)?

+1

Czy sprawdzić [Co webform_DoPostBackWithOptions() zrobić?] (Http://stackoverflow.com/questions/20499444/what-does-webform-dopostbackwithoptions- zrobić)? Czy istnieje jakiś kod po stronie serwera na stronie service.aspx, który modyfikuje odwołania do wstecznej wersji LinkButton1? – Spidey

+0

Ich nie jest taki kod na service.aspx – Ronp

+0

Sprawdź błędy javascript – Aristos

Odpowiedz

0

Dzięki za oryginalny Answer pisarz & dzięki za @Nimesh za dostarczenie linku.

Ustaw właściwość PostBackUrl dla kontrolki serwera LinkButton, oznacza to, że jest to wysyłanie między stronami, a następnie struktura asp.net zamiast zwykłego __DoPostBack() dodaje "WebForm_DoPostBackWithOptions".

Dokonałem pewnych zmian zgodnie z wymaganiami mojego kodu.

Kod LinkButton1 strony (User.master)

<li> 
    <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click" PostBackUrl="~/Default.aspx">Signout 
     <i class="glyphicon glyphicon-off"></i> 
    </asp:LinkButton> 
    </li> 

Jeżeli w przypadku, gdy nie zostało ustawione „PostBackUrl”, a następnie ramy ASP.NET również nie dodaje to domyślnie na przycisku sterowania, tak oznacza to, że musi istnieć inna kontrola ustawiająca wartość atrybutu OnClick prawdopodobnie przy użyciu poniższego kodu bocznego.

Kod User.master.cs

protected void LinkButton1_Click(object sender, EventArgs e) 
    { 

     if (Request.Cookies["ASP.NET_SessionId"] != null) 
     { 
      Response.Cookies["ASP.NET_SessionId"].Value = string.Empty; 
      Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20); 
     } 
     FormsAuthentication.SignOut(); 
     Session.Abandon(); 
     PostBackOptions myPostBackOptions = new PostBackOptions(this); 
     myPostBackOptions.ActionUrl = "~/Default.aspx"; 
     myPostBackOptions.AutoPostBack = false; 
     myPostBackOptions.RequiresJavaScriptProtocol = true; 
     myPostBackOptions.PerformValidation = true; 

     // Add the client-side script to the HyperLink1 control. 
     LinkButton1.OnClientClick = Page.ClientScript.GetPostBackEventReference(myPostBackOptions); 
     Response.Redirect("~/Default.aspx"); 
    } 
+0

Cieszę się, że oryginalny post pomógł ci. Nadal jestem zdezorientowany, dlaczego zachowywał się inaczej na obu formach podrzędnych bez ustawienia "PostBackUrl" na stronie wzorcowej? Jeśli to rozwiązało Twój problem, możesz oznaczyć go jako zaakceptowany. – Spidey

Powiązane problemy