Падащият списък на Asp.NET в потребителския контрол не задейства събитие SelectedIndexChanged

Asp.Net 2.0 framewrok - VB.Net приложение Имам UserControl, съдържащ Asp.Net DropDownList.

Неща, които вече са проучени и \ или изпробвани:

  • Контролата се обвързва с данни за зареждането на страницата вътре, ако не Page.IsPostBack (зарежда се само веднъж)
  • ID proprety е зададено за контрол (ID = ddlMyControl)
  • AutoPostBack е зададен на true
  • EnableViewState на контролата е зададено на true
  • AutoEventWireUp в декларацията на UserControl е зададено на true
  • EnableEventValidation е зададено на false в родителската страница

Контролата няма да задейства събитието SelectedIndexChanged, независимо какво правя. ПОМОГНЕ !!

Благодаря :)


person Jim Evans    schedule 25.02.2010    source източник


Отговори (6)


Сблъсках се с подобен проблем и това беше, защото оставих AutoPostBack="true" извън дефиницията на контролата. В първоначалната си публикация казахте, че сте опитали това, но публикуваният код:

<uc3:TheControl ID="ucMyControl" runat="server" />

не отразява свойството AutoPostBack. Добавих го към моя и той се погрижи за моя проблем. Надявам се това да помогне.

person Jason    schedule 17.07.2011
comment
Страхотен момент - бях задал autopostback = true в падащия контрол, но не и в потребителския контрол, който го съдържа. Ще го пробвам. - person Jim Evans; 21.07.2011
comment
@Jason Искаш да кажеш, като просто добавиш собствеността към uc? Защото пробвах <uc1:Header ID="head1" runat="server" AutoPostBack="true" /> и не ми се получи. Вярвам, че имам точно същата настройка като OP. :( - person Chiramisu; 29.01.2013

Знам, че е много късно, но си помислих, че ще помогне на други, които са се сблъскали със същия проблем.

Предполагам, че искате да задействате SelectedIndexChanged събитието на DropDownList, което вече е обвързано с някои данни!
Например [C#]

ddlMyDropDown.DataSource = listOfCustomers;
ddlMyDropDown.DataTextField = "CustomerName";
ddlMyDropDown.DataValueField = "CustomerID";
ddlMyDropDown.DataBind();
ddlMyDropDown.CauseValidation = false;

Предполагам, че използвате asp.net (последната версия).. може би 4.0.

person iTeach    schedule 08.07.2011
comment
къде е отговорът тук? - person mmssaann; 23.10.2013

Какво ще кажете за страницата "около". Бихте ли могли да опитате вашия UserControl в друга страница?

Как добавяте манипулатора на събития? Как включвате контрола на употребата? (Когато чрез код, може да е твърде късно?)

Може би бихте могли да покажете някакъв код ;-)

person Robert    schedule 25.02.2010
comment
Добавен код в отговор по-горе, за да мога да използвам кодов блок. - person Jim Evans; 26.02.2010

UserControl не се зарежда динамично, а се добавя към родителската страница по време на проектиране в HTML кода на страницата

<uc3:TheControl ID="ucMyControl" runat="server" />

Манипулаторът на събития е кодиран в кода зад самия UserContorl - стандартни неща:

 Protected Sub ddlMyThing_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlMyThing.SelectedIndexChanged
    'Do event stuff here.
End Sub
person Jim Evans    schedule 25.02.2010
comment
Би било по-добре да разширите първоначалния въпрос, вместо да го направите комуникационна нишка - вярвам. - person Robert; 25.02.2010
comment
Не - автоматичното обратно изпращане изобщо не се задейства - зададох точки на прекъсване в отстраняване на грешки както при зареждането на страницата, така и в манипулатора на събития SelectIndexChanged и приложението просто прелита, без да спира, когато избера нов елемент в DropDownList. Щракванията върху бутоните в същия потребителски контрол обаче се задействат - сега измислете :) - person Jim Evans; 25.02.2010
comment
Не съм сигурен какво имате предвид, като разширявате въпроса към нишка за комуникация - но ако ми кажете как.... - person Jim Evans; 25.02.2010
comment
Всъщност - изглежда, че има грешка в javascript на страницата: this.getelement().style е null или не е зададено. След това много гугъл изглежда, че е свързано с Asp.Net AJAX Toolkit - който се използва тук. Но не намери решение. - person Jim Evans; 26.02.2010

Задали ли сте свойството onselectedindexchanged="ddlMyThing_SelectedIndexChanged" на ddl?

person Ahmad    schedule 25.02.2010
comment
Не – има атрибут за манипулатори на манипулатора на събития Protected Sub ddlMyThing_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlMyThing.SelectedIndexChanged „Направете събития тук. End Sub - person Jim Evans; 26.02.2010

Мисля, че трябва да зададете EnableEventValidation на True.

Виж това.

http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22405007.html

Надявам се това да помогне.

Благодаря,

Раджа

person Raja    schedule 25.02.2010
comment
Няма да плащам на този сайт за отговор :) - като се има предвид това - EnableEventValidation е вярно по подразбиране, ако не е декларирано и обратното изпращане не е било грешно. Една от статиите, които открих в моето проучване, имаше решение на абсолютно същия проблем, като го зададе на false - но не работи за мен. - person Jim Evans; 25.02.2010