2012-04-20 2 views
0

Итак, у меня есть ObjectDataSource, у которого есть связанный с ним метод обновления и удаления, а DS связан с gridview. Когда я вызываю методы, я хочу, чтобы заселить выпадающий список в мастер-странице, содержащей те же данные сетки, поэтому я пытаюсь вызвать методы следующим образом:Методы ObjectDataSource не могут ссылаться на методы главной страницы

  MyApp MasterPage = (MyApp)Page.Master; 
      MasterPage.getData(); 

Теперь, если я делать вставки из сетки (которая обрабатывается событием RowCommand, а не DS) это работает отлично, но через DS я получаю следующую ошибку: «Ссылка на объект не установлена ​​в экземпляр объекта».

Я вижу некоторые поля на aspx, которые еще не доступны из обратной передачи, но как главная страница не может быть доступна для страницы, которая зависит от нее? Должен ли я быть в состоянии ссылаться на него? есть ли какой-нибудь бэкдорский трюк? Я знаю, что могу избавиться от DS, но я хочу использовать его, потому что это упрощает разбиение на страницы и сортировку.

Благодаря

+0

Вы поставили точку останова перед 'MasterPage.getData()', чтобы проверить, что MasterPage имеет значение NULL? Если вы это сделаете и обнаружите, что это не null, вы можете перейти в 'getData()' и посмотреть, есть ли там нулевая ссылка. – mafue

+0

Yep, masterPage is null – Limey

+0

Когда я вникнул в это немного больше, он вызывает метод, но так как метод ссылается на раскрывающийся список (который еще не существует) его спасение. – Limey

ответ

1

Проверить порядок событий в masterpage-contentpage life-cycle. Возможно, вы сможете перенести свой код на событие, которое запускается после того, как главная страница имеет доступ к раскрывающемуся списку.


EDIT: альтернатива

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

protected object SomePropertyICreatedToStoreData {get;set;} 

void GetData() 
{ 
    // get the data (this part works already) 
    var theData = WhereTheDataComesFrom 

    // bind to dropdownlist - doesn't work, so... 
    this.SomePropertyICreatedToStoreData = theData; 
} 

... потом

 this.MyDropDownList.DataSource = this.SomePropertyICreatedToStoreData; 
+0

Да, я мог бы переместиться в rowCommand, но тогда ObjectDataSource обидится, и мне бы очень не хотелось писать весь код, так красиво обрабатывать для меня. – Limey

+0

@ Limey, альтернатива, которую я только что добавил, может работать. Если нет, возможно, вы можете обновить вопрос, показывающий последовательность событий, которые у вас есть, и что не работает. – mafue

+0

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

0

Вы должны добавить директиву Master:

<%@ MasterType TypeName ="MasterPageClassName" %> 

или

<%@ MasterType virtualpath="~/Masters/Master1.master" %> 

http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

Обновление: Разделено TypeName и виртуальный путь, как указано в комментариях.

+0

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

+0

Я уверен, что вам нужна ссылка. Попробуйте: <% @ MasterType TypeName = "MasterPageClassName"%> – Ulises

+0

та же проблема, что и раньше. и вы можете иметь виртуальный путь TypeName OR, он не позволит вам иметь оба. – Limey

Смежные вопросы