Привет всем! У меня возникла задача с ASP.NET разработкой. Мне нужно из JavaScript кода обратиться к функции, которая находится в пользовательском веб-контроле, используя событие клика кнопки.
Насколько я понимаю, обычно callback функции работают только в рамках текущей страницы, но может есть способ как-то обойти это ограничение? Или я что-то неправильно понимаю в архитектуре?
Вот примерно что я хочу сделать:
public partial class MyUserControl : UserControl
{
protected void ButtonClick_Handler(object sender, EventArgs e)
{
ProcessData();
}
private void ProcessData()
{
// моя логика здесь
}
}
А из JavaScript хочу как-то вызвать ProcessData() или похожий метод. Возможно ли это реализовать?
Нельзя напрямую вызвать серверный метод веб-контрола из JS. Можно использовать __doPostBack(), но страница перезагрузится. Лучше сделать AJAX с PageMethods или веб-сервисами - создай статический метод с [WebMethod] и вызывай через XMLHttpRequest. Или используй UpdatePanel с триггерами, чтобы обновлялась только нужная часть.
я делал через скрытую кнопку. создаёшь Button с style="display:none", привязываешь обработчик на сервере. из джаваскрипта эмулируешь клик через document.getElementById('buttonId').click(). работает отлично, только clientID правильно получи через button.ClientID. простое решение.
Пробовал ScriptManager с ClientScript? Зарегистрируй JS функцию через ClientScript.RegisterStartupScript() в коде контрола, а из неё уже делай постбэк. Контрол только должен быть правильно прописан на родительской странице. Что конкретно хочешь в ProcessData() делать? Может проще решить как-то по-другому.