ОК: у меня есть UpdatePanel на странице aspx, которая содержит один заполнитель.
Внутри этого заполнителя я добавляю один из выбора пользовательских элементов управления в зависимости от определенных внешних условий (это страница конфигурации).
В каждом из этих пользовательских элементов управления есть функция javascript bindUcEvents (), которая связывает различные события jQuery и javascript с кнопками и валидаторами внутри пользовательского элемента управления.
Проблема, с которой я столкнулся, заключается в том, что javascript usercontrol не распознается. Обычно javascript внутри панели обновлений выполняется, когда панель обновлений отправляет обратно, однако ни один из этих кодов не может быть найден на странице (я пробовал запускать функцию вручную через консоль firebug, но он говорит, что не может найти функцию).
У кого-нибудь есть предложения?
Cheers, Ed.
EDIT:
урезанный (но функциональный) пример:
Markup:
<script src="/js/jquery-1.3.2.min.js"></script>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="Script" runat="server" />
<asp:Button ID="Postback" runat="server" Text="Populate" OnClick="PopulatePlaceholder" />
<asp:UpdatePanel ID="UpdateMe" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Postback" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Literal ID="Code" runat="server" />
<asp:PlaceHolder ID="PlaceMe" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
C #:
protected void PopulatePlaceholder(object sender, EventArgs e)
{
Button button = new Button();
button.ID = "Push";
button.Text = "push";
button.OnClientClick = "javascript:return false;";
Code.Text = "<script type=\"text/javascript\"> function bindEvents() { $('#" + button.ClientID + "').click(function() { alert('hello'); }); } bindEvents(); </script>";
PlaceMe.Controls.Add(button);
}
Вы увидите, что кнопка не отображает предупреждение, даже если код присутствует на странице.
EDIT2:
Хорошо, просто чтобы прояснить, рабочий код значительно сложнее, чем просто одна функция, связанная с литералом, и содержит большое количество
<%= Control.ClientID %>
битов кода, которые будет очень трудно разделить на неспецифические функции, и они бессмысленны, поскольку каждый из них используется только в одном месте (мы говорим об очень специфической валидации и нечетном триггере всплывающих окон + некоторая логика) .