Как зарегистрировать обработчики событий для веб-пользователя в моем коде?


1

У меня возникла проблема с настройкой события на форме. Вот настройка:

Мне была предоставлена ​​страница с двумя элементами управления, двумя разными версиями формы для конечного пользователя, которые заполнят стандартную и расширенную. Эти две формы имеют разные коды и javascript, поэтому первоначальный разработчик помещает их в отдельные элементы управления веб-пользователями. Помимо элементов управления используется LinkButton, который переключается в режим Advanced.

<uc1:Standard runat="server" ID="StandardForm" /> 
<uc1:Advanced runat="server" ID="AdvancedForm" /> 
<asp:LinkButton runat="server" ID="lnkAdvanced" Text="Go To Advanced" OnClick="lnkAdvanced_Click" /> 

lnkAdvanced_Click просто берет всю информацию, введенную в настоящее время на продвинутый, и переворачивает видимый.

Моя проблема заключается в том, что один из боссов хочет, чтобы кнопка «Перейти к прогрессу» находилась в стандартной форме, но на странице показан код .Visible. Поэтому я подумал, что это может быть сделано с использованием события, но оно, похоже, не работает.

Я пытался настроить событие так:

public event EventHandler AdvanceClick; 

protected void lnkAdvanced_Click(object sender, EventArgs e) { 
    AdvanceClick(sender, e); 
} 

И когда это не сработало, я пытался создать делегат:

public delegate void AdvancedEventHandler(object sender, EventArgs e); 
public event AdvancedEventHandler AdvanceClick; 

Когда я переехал на кнопку в стандартной форме я мог бы набрать что-то вроде:

StandardForm.AdvanceClick += new AdvancedEventHandler(GoToAdvanced); 

Но, похоже, ts в пределах контроля! Я получаю сообщение об ошибке: «Стандарт не содержит определения для« AdvanceClick »и никакого метода расширения« AdvanceClick, принимающий первый аргумент типа «Стандарт», может быть найден «Он находит другие свойства просто прекрасными, я собираюсь сделать это неправильно путь?

  0

Как вы объявили мероприятие? 22 фев. 092009-02-22 06:48:21

  0

Что-то подсказывает мне, что вся настройка управления неправильная, но вам сложно помочь без дальнейших подробностей. Я знаю, что вы уже предоставили более подробную информацию, но я не думаю, что это достаточно. По крайней мере, вы должны сообщить нам, в каких файлах живут различные фрагменты кода ... page1.aspx, control1.ascx и т. Д. 22 фев. 092009-02-22 07:27:45

  0

Спасибо всем за подтверждение того, что я действительно пытался настроить его правильно. Невозможность ссылаться на это событие сводило меня с ума. 22 фев. 092009-02-22 17:27:57

0

Если стандартная форма имеет кнопку «Переключиться на продвинутый». Затем, очевидно, он должен знать о расширенной форме и, следовательно, они, похоже, довольно тесно связаны.Если это так, мне кажется, что вы могли бы просто иметь расширенную форму в качестве ребенка стандартной формы, тогда ... или еще лучше, объединить их в один элемент управления.

Если вам не нравятся эти параметры, возможно, вы захотите создать третий элемент управления, в котором находится кнопка и две формы, а также логика для перемещения данных между ними и переключения их видимости.

Я лично рекомендую один вариант управления. Как правило, контроль с высокой степенью сцепления просто приводит к путанице по дороге. Вы можете ослабить зависимость по-разному, но подумайте об этом, прежде чем вы это сделаете.

В унаследованном проекте, над которым я работаю в настоящее время, у нас есть множество примеров, таких как формы serach и результаты поиска, разделенные на несколько элементов управления, но затем, в конце концов, нужно, чтобы все остальные экземпляры функционировали должным образом. Как я сказал ранее, я не буду рекомендовать этот путь.

  0

Эти элементы управления не нуждаются в плотной связи, если логика делегирована на главную страницу, тогда «расширенный режим» может быть переключен на что угодно в любое время без изменения стандартного элемента управления, потому что только хост должен знать, что делать. В этом и есть все, что нужно, чтобы разоблачить это событие. 22 фев. 092009-02-22 08:04:45

  0

Сколько видов использования вы действительно думаете, что кнопка «Перейти к продвинутому» будет иметь? Я имею в виду, что это не похоже на то, что он когда-либо переключается на что-либо, кроме расширенной формы. Если бы это было так, я не думаю, что кнопка имеет что-то делать в стандартной форме, она должна находиться на странице/контроле. 22 фев. 092009-02-22 12:28:21

  0

Эта установка просто пахнет смешно. Я не думаю, что это почти так сложно, как все пытаются это сделать. Хотелось бы, чтобы я знал больше о требованиях к управлению, случаях использования и их отношении к друг другу. Я просто догадываюсь, что стандартные и расширенные элементы управления не предназначены для использования по одному за раз. ;) 22 фев. 092009-02-22 12:38:53

  0

Согласовано. Что-то должно быть не так с установкой, и вместо того, чтобы тратить время на выяснение этого, я просто принял формы из элементов управления и панелей как движение «Все, что работает». Спасибо всем за помощь! :) 22 фев. 092009-02-22 17:25:01


0

Вам не нужен делегат, потому что вы создали стандартное событие.

Try в вашей форме нагрузки или около:

StandardForm.AdvanceClick += new EventHandler(GoToAdvanced); 

Тогда где-то на странице, которая проходит 2 пользователь управляет

protected void GoToAdvanced(object sender, EventArgs e) 
{ 
    //Code that was previously in lnkAdvanced_Click on page. 
} 

Edit:

Это звучит, как установка будет неправильно.

Можете ли вы разместить разметку для главной страницы (в этот момент мы предполагаем, что это всего лишь два пользовательских элемента управления).

Затем мы также предполагаем, что событие AdvanceClick объявлено в стандартном UC, но сообщение об ошибке указывает, что это не так .. и метод lnkAdvanced_Click находится в стандартном UC?

Затем мы предполагаем, что код, который пытается подключиться к пользовательскому событию, объявляется на главной странице.

Если вы можете подтвердить или опровергнуть допущения, я уверен, что мы сможем это прояснить.


1
// in your Standard user control 
public event EventHandler AdvancedClick; 

private void lbtnAdvanced_Click(object sender, EventArgs e) 
{ 
    OnAdvancedClick(e); 
} 

protected void OnAdvancedClick(EventArgs e) 
{ 
    if (AdvancedClick != null) 
     AdvancedClick(this, e); 
} 

// on your page 
StandardForm.AdvancedClick += new EventHandler(StandardForm_AdvancedClick); 

private void StandardForm_AdvancedClick(object sender, EventArgs e) 
{ 
    // toggle logic here 
} 
  0

Этот подход сочетал бы стандартную и расширенную формы вместе вместо делегирования логики на главную страницу. Пока связь элементов управления не является проблемой, тогда нормально, но я бы вообще избегал этого, когда это не было необходимо. 22 фев. 092009-02-22 07:16:42

  0

согласился, я не обратил внимание на то, что его логика переключения была на странице. Я обновил свой ответ соответственно. 22 фев. 092009-02-22 07:25:10