我有一个控件,上面有一个按钮。所有按钮都将用户重定向到另一个页面。在这个控件上我有另一个控件,只显示一些东西,没什么花哨的。当我点击按钮时,它什么也没做。当我删除或注释掉其他控件时,按钮事件有效。这是设计的吗?我不确定如何解决它或导致它的原因。
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按钮,它有效,所以它与SexyButton控件有关。
如果我在ControB上放置一个asp.net按钮和SexyLinkButton,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
}
}
答案 0 :(得分:3)
可能发生的是你的“SexyLinkButton”控件导致javascript错误导致你的按钮回发。检查浏览器的错误控制台以查看是否正在生成任何javascript错误。另外,尝试替换标准的LinkButton控件而不是SexyLinkButton来查看是否可以修复它。
编辑:看起来它实际上是PostBackUrl的表单问题。