【发布时间】:2010-03-24 17:26:02
【问题描述】:
我有一个控件,上面有一个按钮。该按钮所做的只是将用户重定向到另一个页面。在这个控件上,我有另一个控件,它只显示一些东西,没什么特别的。当我单击按钮时,它什么也不做。当我删除或注释掉另一个控件时,按钮事件起作用。这是设计使然吗?我不确定如何修复它或导致它的原因。
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>
如前所述,如果 ControlB 在 ControlA 内,Button1_Click 不会触发,但如果我删除 ControlB 或将其注释掉,Button1_Click 会触发。
我想通了:
ControlB.ascx 上有一个名为 SexyButton 的按钮(不是创建这个,是其他人创建的,哈哈),当我从 ControlB 中删除它时,ControlA 的按钮起作用了。我在 controlB 中放了一个 asp.net Button,它可以工作,所以它与 SexyButton 控件有关。
如果我将 asp.net 按钮与 SexyLinkButton 一起放在 ControB 上,则 ControlB 上 Button1 的事件不起作用。
SexyLinkButton.cs - 如果我将 PostBackUrl 放在 SexyLinkButton 上,asp.net 按钮事件不会触发。这是 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
}
}
【问题讨论】:
-
没有看到你的代码就帮不了你。
-
具体来说,你想看哪些部分?
-
如果你注释掉第一个控件,你如何导航到另一个页面?
-
@xaisoft 没什么花哨的代码 :)
-
@womp - 好的,我将发布控件的代码。