Обратный вызов OnClick считает, что это функция JavaScript? - PullRequest
0 голосов
/ 27 октября 2010

Я пытаюсь использовать обратный вызов OnClick для вызова функции C #, однако javascript выдает ошибку, говоря, что функция не определена (даже если она есть в коде C #).

Это происходит только в том случае, если ядобавьте элемент управления через Controls.Add в page_load вызова C # за разделом.

Другими словами, если я сделаю это (в функции Page_Load):

        LinkButton l = new LinkButton();
        l.Text = "Test";
        l.ID = "TestID";
        l.Attributes.Add("OnClick", "LinkButton_Click");
        l.Attributes.Add("runat", "server");
        l.Page = Page;
        this.Controls.Add(l);

LinkButton_Click не определеноднако в соответствии с javascript, если я сделаю это:

В файле ascx он работает нормально и фактически вызывает функцию C #.

Ответы [ 5 ]

8 голосов
/ 27 октября 2010

Обработчики событий должны быть подключены на стороне сервера:

LinkButton l = new LinkButton();
l.Text = "Test";
l.ID = "TestID";
l.Click += LinkButton_Click;
l.Page = Page;
this.Controls.Add(l);

Когда вы используете свойство Attributes, вы фактически присоединяете функцию на стороне клиента, которая не существует.

2 голосов
/ 27 октября 2010

Проблема в том, что когда вы определяете LinkButton с помощью разметки, атрибут OnClick интерпретируется как часть элемента управления на стороне сервера.

Когда вы добавляете атрибут OnClick с помощью кода, вы определяете клиентасторонние атрибуты (которые вообще не обрабатываются сервером).

Если вы действительно хотите определить этот обработчик событий с помощью выделенного кода, вам необходимо удалить следующую строку:

l.Attributes.Add("OnClick", "LinkButton_Click");

И заменить его на:

l.Click += LinkButton_Click;
1 голос
/ 27 октября 2010

Вам необходимо добавить обработчик событий в l.Click, а не в атрибутах.

1 голос
/ 27 октября 2010

То, как вы его добавляете, это добавление атрибута в html. Что вам нужно сделать, это добавить обработчик событий l.Click + = new EventHandler ...

1 голос
/ 27 октября 2010

Attribute.Add отправляет в HTML, а не в aspx, поэтому вы говорите, что должна быть функция javascript LinkButton_Click () для обработки события нажатия.

Чтобы прикрепить событие кобъект ac #, следующий правильный синтаксис:

LinkButton l = new LinkButton();
l.Text = "Test";
l.ID = "TestID";
l.Click += LinkButton_Click; // <-- this row attaches the event
this.Controls.Add(l);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...