2009-06-25 2 views
0

Я хочу, чтобы веб-служба загружала элемент управления .ascx, загружала в него некоторые значения и затем возвращала содержимое HTML этого элемента управления. У меня есть что-то вроде этого:ASP.NET LoadControl Использование ключевого слова 'base' недопустимо в этом контексте

[WebMethod(EnableSession = true)] 
public void GetHTML() 
{ 
    UserControl loader = new UserControl(); 
    MyCustomReport reportControl = 
     (MyCustomReport)loader.LoadControl("~/The/path/to/the/.ascx"); 
    reportControl.DataBind(); 

    return "TODO"; 
} 

MyCustomReport переопределяет DataBind():

public override void DataBind() 
{ 
    base.DataBind(); 

    // etc. 
} 

Ряд base.DataBind() бросает NullReferenceException и отладчик говорит:

Использование ключевого слова 'базовой' не является действительным в этом контексте

Любая помощь будет оценена, спасибо!

ответ

1

Попробуйте это:

public override void OnDataBinding() 
{ 
    base.OnDataBinding(); 

    // other stuff here ... 
} 

UserControl не имеет виртуальный DataBind метод, но у него есть виртуальный OnDataBinding метод. Я считаю, что это метод, который вы хотите переопределить.

+0

10x Андрей, таким образом, он не падает в базе. ODataBinding(); однако я считаю, что это меняет смысл кода. В MyCustomReport есть субконтроллеры с аналогичным переопределением - до, base.DataBind(); привели к их привязке данных, теперь их OnDataBinding() s не вызываются. Тот же самый контроль работает, когда он помещается непосредственно в файл .aspx, проблема заключается в том, как я загружаю его в веб-службу, но я не могу понять, что именно не так. – user128873

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