Создание события clicked в элементе управления ascx при нажатии - PullRequest
0 голосов
/ 28 июля 2010

У меня есть вопрос о создании и управлении событиями внутри настраиваемого веб-элемента управления ascx.

Я создал очень глупый элемент управления, состоящий из элемента div, содержащего элемент управления asp: Label, это очень простая структура:

<div id="mydiv" runat="server">
     <asp:Label id="mylabel" text="Text"... />
</div>

То есть очень просто.Я хотел бы добавить событие: нажал.Я хочу позволить пользователю добавить этот элемент управления на страницу и прикрепить обработчики к этому событию, чтобы при нажатии на этот элемент управления можно было что-то делать.Это может показаться странным решением, как будто я снова пытаюсь изобрести кнопку управления, то есть мою пользовательскую кнопку.Хорошо, чтобы запустить событие, я хотел бы добавить javascript в мой div и вызвать функцию js, которая с помощью механизма ajax вызывает функцию на стороне сервера.Ну, как вызвать функцию на стороне сервера отсюда.Я опубликовал вопрос о том, как вызвать функцию на стороне сервера с клиентской стороны, и получил несколько ответов (многие из них сказали мне использовать PageMethods), хорошо, кажется, что метод страницы не работает, он компилируется, но при запуске и нажатии на мойконтроль и выполнение JS (в строке PageMethods.mymethod ()) здесь у меня есть ошибка -> исключение сценария Java: нераспознанный метод.Кажется, я не могу найти PageMethod.

Что ж, учитывая мою цель, как я могу это сделать?Ах, решение вроде: использовать событие click в метке - это не то, что мне нужно, потому что событие click должно срабатывать, когда я нажимаю в div, учтите, что я мог бы установить большое заполнение, чтобы большое пустое пространство могло обеспечить большой кликабельныйплощадь.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 28 июля 2010

Создать событие в вашем пользовательском элементе управления

Например: -

public event EventHandler<CustomEventArgs> Click;

и обработчик

public void OnClick()
{
if(this.Click !=null)
{
    //what ever else you do
    this.Click(new CustomEventArgs(...));
}
}

Также обрабатывать щелчок мыши (mouseleftbuttonup) наПользовательский контроль (и запуск вашего мероприятия оттуда).т.е.

protected void OnMouseDown(...){ this.OnClick(); }

На странице ASP.NET вы можете зарегистрировать событие пользовательского элемента управления и обработать его:

MyControl.Click += new EventHandler<CustomEventArgs>(myctr_click)

protected myctr_click(object sender, CustomEventArgs e){
//do anything
}
0 голосов
/ 28 июля 2010

Возможно, я неверно истолковал ваши требования, но вы не можете просто обернуть div в asp:linkbutton?

<asp:LinkButton ID="lnkSomething" runat="server" OnClick="lnk_something_Click">
<div id="mydiv" runat="server">
 <asp:Label id="mylabel" text="Text"... />
</div>
</asp:LinkButton>

и затем на стороне сервера:

protected void lnk_something_Click(object sender, EventArgs e)
{

}

Как упоминается в комментариях желтая лягушка, вы можете расширить ее, добавив ее в панель обновления для асинхронной обратной передачи.

0 голосов
/ 28 июля 2010

PageMethods использует веб-сервис в классе страницы; Я предполагаю, что вы хотите отправить обратно на сервер и обработать этот клик на странице, верно?

Все элементы управления, выполняющие обратную передачу, используют метод __doPostBack ('clientid', '') для обратной передачи на сервер. Ваш лейбл должен будет сделать то же самое. Внутри элемента управления элемент управления должен реализовать IPostBackEventHandler для обработки этих событий и вызвать событие click.

Проверьте этот пример: http://www.myviewstate.net/blog/post/2009/05/14/Implementing-IPostBackEventHandler-in-an-ASPNET-Control.aspx

...