Как я отменяю распространение событий в ASP.net?

PLEAC, имеет Поваренную книгу Python, которая очень полезна.

8
задан mclark1129 30 November 2009 в 21:11
поделиться

3 ответа

In your user control class, override OnBubbleEvent(). If you return true, you will stop the "bubble up" to the parent controls.

protected override bool OnBubbleEvent(object source, EventArgs args)
    {
        //handled
         return true;

        //uncomment line below to bubble up (unhandled)
        //return base.OnBubbleEvent(source, args);
    }

Another somewhat neat thing to think about that I found while tinkering on this, which might be useful in some instances... you can change the command name that 'bubbles up' in the control heirachy as well. In your child user control, use OnCommand, rather than Onclick.

So, say you have a button in your user control, change the code from this:

<asp:button id="mySpecialButton" 
            onClick="mySpecialButton_OnClick" runat="server">

to this:

<asp:Button id="mySpecialButton"
           CommandName="mySpecialCommand"
           CommandArgument="myArgument"
           OnCommand="mySpecialButton_Command" 
           runat="server"/>

then in the codebehind,

protected void mySpecialButton_Command(object sender, CommandEventArgs e)
        {
            RaiseBubbleEvent(this, new CommandEventArgs("Handled", e));
        }

Thus, in your parent control's ItemCommand handler you will then get this new command name rather than the original command name from the child control, which you can do with as you see fit.

11
ответ дан 5 December 2019 в 14:03
поделиться
  1. Первый вопрос, который мне нужно задать, это почему, и я буду вести разговор в направлении «Вам действительно нужно перенести это с VMS». О VMS стоит упомянуть несколько вещей:

    -> VMS все еще активно разрабатывается и поддерживается HP. На прошлой неделе они только выпустили V8.4 для полевых испытаний (см. http://h71000.www7.hp.com/openvmsft/ ).

    -> VMS доступна на новом оборудовании; в частности, серверы HP Integrity на базе процессора Itanium

    -> VMS также доступна на виртуальных платформах через продукты Charon Emulation.

    -> По популярным оценкам, сегодня активно используется около 300 000 систем VMS. LMS может быть последним человеком в LargeCo, но он далеко не последний человек, стоящий в мире.

    -> Много информации там, см. Openvms.org, например, чтобы увидеть много текущей информации о VMS, все от текущих пользователей .

  2. Хорошо - вы все еще хотите перенести VMS. Как ты делаешь это? Ну, это зависит от множества вещей.

    -> Как уже говорили другие, насколько стандартен код? Скорее всего, не очень. Чем больше VMS-измов, тем труднее работа. 'Нуфф сказал.

    -> Что такое база данных? Если это Oracle, вероятно, не так уж сложно перейти на Oracle на какой-то другой платформе. Если это какая-то специальная БД, основанная на индексных файлах RMS, то вам нужно сделать больше работы, вам нужно будет воссоздать эту псевдо БД или, достаточно понять ее, чтобы заменить ее какой-нибудь реляционной БД.

    -> Кроме C, что еще используется для создания приложения? Что на передней панели? DECforms? ФМС? Есть ли механизм транзакций, например ACMS? РТР? Эти вещи будут иметь огромное влияние на выполнимость и усилия, необходимые для переноса на UNIX.

    -> Какие еще продукты задействованы? Используются ли сторонние библиотеки? Используются ли сторонние продукты, критически важные для приложения или функциональности?

    -> Сгруппирована ли эта система? Если да, то почему? Вам нужно будет достичь тех же целей с UNIX-системой.

    -> Есть компании, которые помогут вам в этом, и утверждают, что у них есть инструменты, облегчающие задачу, но мой опыт показывает, что эти компании, как правило, продавать вам больше услуг, чем продуктов (т. е. вам нужно нанять их, чтобы использовать инструменты. Это будет дорого).

0
ответ дан 5 December 2019 в 14:03
поделиться

Событие Click технически не всплывает. Это событие вызывается и обрабатывается вашим кодом, но элемент управления списком также отслеживает событие Click и вызывает событие ItemCommand. Невозможно предотвратить это, потому что вы даже не можете гарантировать, какой обработчик событий будет вызван первым.

У вас есть CommandName, связанное с кнопкой, которую вы не хотите вызывать? Вероятно, вам следует полностью избавиться от своего события Button_Click и выполнить обработку команд в событии ItemCommand, проверив аргументы событий для CommandName и отреагировав соответствующим образом.

Другими словами, используйте CommandName, которое идентифицирует то, что вы хотите, затем в событии ItemCommand предпринимайте действия только тогда, когда видите CommandName, за обработку которого вы отвечаете.

1
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: