这里有一些奇怪的行为。我有一些XSLT生成一些带有一些ASP.NET链接按钮控件的HTML
String mstring = sw.ToString();
var myctrl = Page.ParseControl(mstring);
foreach (Control Control in myctrl.Controls)
{
if (Control is LinkButton)
{
LinkButton lb = (LinkButton)Control;
lb.OnClientClick = "LoadPromo";
}
Panel1.Controls.Add(myctrl);
}
protected void LoadPromo(object sender, EventArgs e)
{
Console.Write(e.ToString());
}
现在需要这个控件:
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="LoadPromo" Text="Get your Free 2" />
并在我添加活动时将其更改为:
<a onclick="LoadPromo;" id="dnn_ctr954_ViewPromotions_LinkButton2" href=" WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2 a>
现在你可以看到,它将onclick更改为类似javascript而不是asp.net控件。它将“LoadPromo”更改为“LoadPromo;”。我该怎么做才能解决这个问题?
提前致谢
我尝试过的事情:
lb.Click += LoadPromo;
我得到了这个输出:
<a id="dnn_ctr954_ViewPromotions_LinkButton2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2</a>
答案 0 :(得分:3)
OnClientClick
是服务器控件的属性名称,最终呈现为“onclick”属性。这是为了在客户端调用javascript函数。所以在这种情况下,它看起来很好。
对于OnClick属性,您需要在Page.aspx中匹配服务器端函数的名称。我不确定为什么它会为此渲染onclick属性 - 也许你没有一个带有正确签名的名为“LoadPromo”的函数?
你应该有这样的C#方法:
protected void LoadPromo(object sender, EventArgs e)
{
}
然后你可以通过
将它连接到你的按钮myLinkButton.Click += LoadPromo;