ParseControl в Dotnetnuke ASP.NET меняет onclick на javascript вместо предоставленного метода C#, странное поведение
Иметь здесь какое-то странное поведение. У меня есть некоторые 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("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2</a>
1 ответ
OnClientClick
это имя свойства серверного элемента управления, который в конечном итоге отображается в атрибуте "onclick". Это предназначено для вызова функции JavaScript на стороне клиента. Так что в этом случае все выглядит хорошо.
Для свойства OnClick необходимо, чтобы оно совпадало с именем серверной функции в вашем Page.aspx. Я не уверен, почему он будет отображать атрибут onclick для этого - возможно, у вас нет функции с именем "LoadPromo" с правильной подписью?
У вас должен быть метод C#, подобный этому:
protected void LoadPromo(object sender, EventArgs e)
{
}
Затем вы можете подключить это к вашей кнопке, выполнив
myLinkButton.Click += LoadPromo;