ASP.NET UserControl и DefaultEvent

Контур

Хорошо, я погуглил это и уже ожидал большого жирного НЕТ!! Но я подумал, что должен спросить, так как я знаю, что иногда в головах людей может скрываться странная маленькая жемчужина знаний ^_ ^

Я работаю над некоторыми упражнениями в книге для изучения, и это конкретное упражнение — «Пользовательские элементы управления». Я собрал элемент управления и хотел бы установить для него DefaultEvent (сделав это для предыдущих элементов управления), поэтому, когда я дважды щелкаю его, создается событие по умолчанию, которое я указываю.

ПРИМЕЧАНИЕ. Это стандартный пользовательский элемент управления (.ascx), НЕ настраиваемый элемент управления.

Текущий код

Вот определение класса и события:

[System.ComponentModel.DefaultEvent("OKClicked")]
public partial class AddressBox : System.Web.UI.UserControl
{
    public event EventHandler OKClicked;

Текущий результат

Теперь, когда я дважды щелкаю элемент управления, когда он находится на странице ASPX, создается следующее:

    protected void AddressBox1_Load(object sender, EventArgs e)
    {

    }

Не совсем то, что я ожидал! Итак, мой вопрос:

Можно ли определить DefaultEvent для UserControl? Это взлом? Если это [не] поддерживается, есть ли причина?


Примечание: как вставлять символы подчеркивания в код? Кажется, я не могу вставить и экранировать char?


person Rob Cooper    schedule 14.08.2008    source источник


Ответы (2)


Вот возможный ответ без проверки (как это сделал Мартин).

В рефлекторе вы увидите, что DefaultEventAttribute позволяет наследовать себя. В рефлекторе вы видите, что класс UserControl имеет событие по умолчанию, установленное на событие Load.

Таким образом, возможная причина заключается в том, что даже если вы украшаете свой пользовательский элемент управления событием по умолчанию OKClick, VS все еще может думать, что событием по умолчанию является load, поскольку оно наследуется от UserControl, событием по умолчанию которого является Load.

Просто предположение высокого уровня о том, что может произойти.

person Darren Kopp    schedule 14.08.2008

ОК, я проверил это, наследование от WebControl, а не от UserControl. Все работало нормально.

Похоже, Даррен Копп берет корону за это! Спасибо за отзыв!

person Rob Cooper    schedule 15.08.2008