2010-03-24 3 views
1

J'ai un contrôle qui a un bouton dessus. Tout le bouton est rediriger l'utilisateur vers une autre page. Sur ce contrôle j'ai un autre contrôle qui affiche juste quelques trucs, rien d'extraordinaire. Quand je clique sur le bouton, ça ne fait rien. Lorsque je supprime ou commente l'autre contrôle, l'événement de bouton fonctionne. Est-ce par conception? Je ne suis pas sûr de savoir comment le réparer ou ce qui le cause.Le contrôle au sein d'un autre contrôle dans asp.net désactive les événements côté serveur?

ControlA.ascx contient un bouton avec un événement comme ceci:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("~/Home.aspx"); 
} 

ControlA.ascx contient un autre contrôle à l'intérieur de celui-ci, permet de l'appeler ControlB.ascx. L'événement de clic Button1 ne se déclenche pas lorsque ControlB.ascx se trouve dans ControlA.ascx, mais lorsque je le supprime ou le retire, l'événement Button1 se déclenche et passe à Home.aspx. Cela ne se produit pas seulement pour Button1, si je décide d'ajouter un second bouton et de créer un événement pour celui-ci, si ControlB est dans ControlA, l'événement du second bouton ne se déclenchera pas non plus.

balisage ControlA.asx et code:

<div> 
    <asp:Button runat="server" ID="Button1" Text="Register 2" 
          onclick="Button1_Click" /> 
</div> 
<div> 
    <uc:ControlB ID="ControlB" runat="server" /> 
</div> 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("~/Home.aspx"); 
} 

balisage ControlB.ascx:

<div> 
    <p>I am control B</p> 
    <p> 
    <sbi:SexyLinkButton ID="SexyLinkButton1" runat="server" Text="Go Home" 
         PostBackUrl="~/home.aspx" /> 

     <asp:Button runat="server" ID="Button1" Text="Register 2" 
          onclick="Button1_Click" /> 

</p> 
</div> 

Comme indiqué précédemment, Button1_Click ne se déclenche pas si ControlB est à l'intérieur ControlA, mais si je retire ControlB ou commentez, Button1_Click tire.

je me suis dit quelque chose:

ControlB.ascx avait un bouton sur elle appelé SexyButton (n'a pas créé cela, quelqu'un d'autre a fait, lol) et quand je l'ai enlevé que de ControlB, bouton de ControlA travaillé. J'ai mis un bouton asp.net dans controlB et cela a fonctionné, donc ça a quelque chose à voir avec le contrôle SexyButton.

Si je mets un bouton asp.net sur ControB avec le SexyLinkButton, l'événement pour Button1 sur ControlB ne fonctionne pas. SexyLinkButton.cs - Si je mets le PostBackUrl sur le SexyLinkButton, les événements du bouton asp.net ne se déclenchent pas. Voici le code des SexyLinkButton.cs:

public class SexyLinkButton : LinkButton 
{ 
    private List<string> Css = new List<string>(); 

    public string IconCssClass { get; set; } 
    public SizeEnum Size { get; set; } 

    public SexyLinkButton() 
    { 
     Size = SizeEnum.Normal; 
    } 

    protected override void Render(System.Web.UI.HtmlTextWriter writer) 
    { 
     if (!string.IsNullOrEmpty(CssClass)) Css.Add(CssClass);    // User added Css 
     Css.Add("sbi-button");            // Standard Css for button 
     if (Size != SizeEnum.Normal) Css.Add(Size.ToString().ToLower()); // Size Css 

     // Nested spans per design and css requirements 
     HtmlGenericControl span1 = new HtmlGenericControl("span"); 
     HtmlGenericControl span2 = new HtmlGenericControl("span"); 

     // Nested span only for icon 
     if (!string.IsNullOrEmpty(this.IconCssClass)) 
     { 
      HtmlGenericControl btnspan = new HtmlGenericControl("span"); 
      btnspan.Attributes.Add("class", IconCssClass.Replace(".", string.Empty)); 
      btnspan.InnerHtml = this.Text; 
      span2.Controls.Add(btnspan); 
     } 
     else 
     { 
      span2.InnerHtml = this.Text; 
     } 

     CssClass = string.Join(" ",Css.ToArray()); 
     this.Text = ""; 
     span1.Controls.Add(span2); 
     this.Controls.Add(span1); 

     base.Render(writer); 
    } 

    public enum SizeEnum 
    { 
     Normal, 
     Medium, 
     Large 
    } 
} 
+0

Vous ne pouvez pas vous aider sans voir votre code. – womp

+0

Plus précisément, quelles parties voulez-vous voir? – Xaisoft

+0

Comment naviguer vers l'autre page si vous commentez le premier contrôle? – Shoban

Répondre

3

Qu'est-ce qui se passe probablement est que votre contrôle « SexyLinkButton » est à l'origine d'une erreur javascript qui est la prévention de la postback de votre bouton. Vérifiez la console d'erreur de votre navigateur pour voir si des erreurs javascript sont générées. En outre, essayez de substituer un contrôle LinkButton standard au lieu de SexyLinkButton pour voir si cela le corrige.

Éditer: il semble que ce soit un problème de formulaire avec PostBackUrl.

+0

Ouais, j'ai effectivement supprimé le SexyLinkButton et l'ai remplacé par un bouton asp.net et cela a fonctionné. – Xaisoft

+0

Button1 est l'événement qui ne se déclenche pas lorsque SexyLinkButton est présent. SexyLinkButton fonctionne bien. – Xaisoft

+0

Y at-il eu des erreurs javascript? Clairement SexyLinkButton empêche Button1 de tirer. Est-ce que SexyLinkButton inclut un élément de formulaire (c'est-à-dire lorsque vous affichez la source de la page)? Si oui, sachez que vous ne pouvez pas imbriquer des formulaires; Cela pourrait conduire au genre de comportement que vous voyez (bien que je pense que cela ne fait que générer une erreur). – tloflin

Questions connexes