2010-03-24 61 views
1

我有一個控件,它上面有一個按鈕。所有按鈕都會將用戶重定向到另一個頁面。在這個控制上,我有另一個控制只顯示一些東西,沒有什麼幻想。當我點擊按鈕時,它什麼也不做。當我刪除或註釋掉其他控件時,按鈕事件就起作用。這是設計嗎?我不知道如何解決它或導致它。控制asp.net中的另一個控件禁用服務器端事件?

ControlA.ascx包含一個按鈕,像這樣的事件:

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

ControlA.ascx包含它裏面的另一個控制,讓叫它ControlB.ascx。

當ControlB.ascx位於ControlA.ascx中時Button1單擊事件不會觸發,但當我將其移出或取出時,Button1事件觸發並轉到Home.aspx。這不僅發生在Button1上,如果我決定添加第二個按鈕併爲其創建事件,如果ControlB在ControlA中,則第二個按鈕事件也不會觸發。

ControlA.asx標記和代碼:

<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"); 
} 

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> 

如前所述,的button1_Click不火,如果ControlB裏面ControlA,但如果我刪除ControlB或註釋掉它,Button1_Click觸發。

我想通一些東西:

ControlB.ascx有一個按鈕叫SexyButton(沒有創造這個,別人沒有,哈哈),當我刪除了從ControlB,ControlA的按鈕工作。我在controlB中放了一個asp.net按鈕,它工作,所以它與SexyButton控件有關。

如果我將一個asp.net按鈕與SexyLinkBut​​ton一起放在ControB上,ControlB上Button1的事件不起作用。

SexyLinkBut​​ton.cs - 如果我把PostBackUrl放在SexyLinkBut​​ton上,asp.net按鈕事件不會觸發。這裏是代碼的SexyLinkBut​​ton.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

無法在沒有看到您的代碼的情況下幫助您。 – womp 2010-03-24 17:28:06

+0

具體來說,你想看到哪些部分? – Xaisoft 2010-03-24 17:31:44

+0

如果您註釋掉第一個控件,您將如何導航到其他頁面? – Shoban 2010-03-24 17:33:24

回答

3

什麼是可能發生的是,你的「SexyLinkBut​​ton」控制引起,導致您的按鈕的回發一個JavaScript錯誤。檢查您的瀏覽器的錯誤控制檯,看看是否有任何JavaScript錯誤正在生成。另外,試着用一個標準的LinkBut​​ton控件替代SexyLinkBut​​ton來查看是否修復了它。

編輯:看起來它實際上是PostBackUrl的表單問題。

+0

是的,我實際上刪除了SexyLinkBut​​ton,並用一個asp.net按鈕替換它,它工作。 – Xaisoft 2010-03-24 18:15:16

+0

Button1是當SexyLinkBut​​ton在那裏時不會觸發的事件。 SexyLinkBut​​ton正常工作。 – Xaisoft 2010-03-24 18:16:30

+0

是否有任何javascript錯誤?顯然SexyLinkBut​​ton阻止Button1發射。 SexyLinkBut​​ton是否包含表單元素(即,當您查看頁面源代碼時)?如果是這樣,請注意,您不能嵌套表單;這可能會導致你看到的那種行爲(儘管我認爲它通常只會引發錯誤)。 – tloflin 2010-03-24 18:26:49

相關問題