0

这里有一些奇怪的行为。我有一些 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(&quot;dnn$ctr954$ViewPromotions$LinkButton2&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Get your Free 2</a>
4

1 回答 1

3

OnClientClick是最终呈现为“onclick”属性的服务器控件的属性名称。这是为了在客户端调用 javascript 函数。所以在这种情况下,它看起来很好。

对于 OnClick 属性,您需要使其与 Page.aspx 中的服务器端函数的名称相匹配。我不确定为什么它甚至会为此渲染 onclick 属性 - 也许您没有一个名为“LoadPromo”且签名正确的函数?

你应该有一个像这样的 C# 方法:

protected void LoadPromo(object sender, EventArgs e)
{

}

然后你可以通过这样做将它连接到你的按钮

myLinkButton.Click += LoadPromo;
于 2010-02-18T17:45:21.983 回答