2012-04-26 24 views
2

我在aspx页面中设置了runat服务器的div。div runat =“server”静态方法中的空引用异常

<div class="article-container" runat="server" id="divArticleContainer"></div> 

现在这个div将会有一个用户控制通过一个静态方法添加到它:

public static void LoadCurrentArticle(int index) 
    { 
     divArticleContainer.Controls.Clear(); 
     Page pg = new Page(); 
     string path = @"/Frontend/Controls/Article/ArticleItem.ascx"; 
     ArticleItem control = (ArticleItem)pg.LoadControl(path); 
     control.Functionality.article = Functionality.articles.ElementAt(index); 
     divArticleContainer.Controls.Add(control); 
    } 

基本上给你简要介绍一下我的程序加载的新闻文章的列表。在触摸手势(向左或向右滑动)时,ajax调用Web方法GetNext()和GetPrevious()将移动到列表中的下一个项目或前一个项目。

[WebMethod] 
    public static void GetNext(int index) 
    { 
     int idx = index; 
     idx++; 
     if (idx < Functionality.articles.Count()) 
     { 
      LoadCurrentArticle(idx); 
      Functionality.index = idx; 
     } 
     else 
     { 
      idx = 0; 
      LoadCurrentArticle(idx); 
      Functionality.index = idx; 
     } 
    } 

    [WebMethod] 
    public static void GetPrevious(int index) 
    { 
     int idx = index; 
     idx--; 
     if (idx >= 0) 
     { 
      LoadCurrentArticle(idx); 
      Functionality.index = idx; 
     } 
     else 
     { 
      idx = Functionality.articles.Count() - 1; 
      LoadCurrentArticle(idx); 
      Functionality.index = idx; 
     } 
    } 

我的主要问题是'divArticleWrapper'返回空引用异常这一事实。有没有解决这个问题的方法? enter image description here

+0

如果你的WebMethods不回什么,客户的页面将如何更新? – 2012-04-26 10:50:25

+0

不要忘了将答案标记为接受,如果你有你想要的信息 – 2012-05-04 18:08:07

回答

3

在静态方法不能访问页面控件divArticleWrapper ...

你不能访问从一个静态方法非静态控制。

静态方法可以访问静态变量仅..

EDIT

静态方法不能访问实例的状态(如非静态控制)。无论是从方法声明中删除静态的,或者传递给控制的引用作为参数传递给方法:

private static void YourStaticMethod(HtmlControl div) 
{  
//than do your task 
} 

...并调用它像这样:

YourStaticMethod(divArticleWrapper); 
+0

是的,我做到了,但我仍然得到一个空引用异常,因为当我通过'divArticleWrapper'方法'YourStaticMethod(divArticleWrapper);'。有没有另一种方法将我的控件附加到页面上? – 2012-04-26 11:04:23