ParseControl в Dotnetnuke ASP.NET меняет onclick на javascript вместо предоставленного метода c #, странное поведение - PullRequest
0 голосов
/ 18 февраля 2010

Иметь здесь какое-то странное поведение. У меня есть некоторые XSLT, который генерирует HTML с несколькими элементами управления ASP.NET Link Button

 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>

Теперь, как вы можете видеть, он изменяет клик на подобный 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>

1 Ответ

3 голосов
/ 18 февраля 2010

OnClientClick - это имя свойства серверного элемента управления, которое в конечном итоге отображается в атрибуте «onclick». Это предназначено для вызова функции javascript на стороне клиента. Так что в этом случае все выглядит хорошо.

Для свойства OnClick необходимо, чтобы оно совпадало с именем серверной функции в вашем Page.aspx. Я не уверен, почему он будет отображать атрибут onclick для этого - возможно, у вас нет функции с именем «LoadPromo» с правильной подписью?

У вас должен быть такой метод C #:

protected void LoadPromo(object sender, EventArgs e)
{

}

Затем вы можете подключить это к вашей кнопке, выполнив

myLinkButton.Click += LoadPromo;
...