5

我在这里发现了另一个有类似问题的线程: Visual Studio 2010:无法显示设计视图 ,但在我的情况下,我没有使用自定义控件。

在 Win7 32 位机器上,我使用 Visual Studion 2010 创建一个使用 Visual Basic 代码的 asp.net Web 应用程序。我已将标准 Web 控件添加到 default.aspx 表单。

昨天我保存了项目,在调试模式下运行了一会儿,然后关闭了 Visual Studio(自上次保存以来没有进行任何更改)。

今天,当我打开解决方案并查看 default.aspx 文件的设计视图时,应该显示的所有控件改为显示“创建控件时出错 - 控件名称。对象引用未设置为对象的实例”

我没有对解决方案进行任何更改。

错误列表中不显示错误。Web 应用程序构建没有错误。该应用程序运行没有错误(在调试模式下)并在网页上正确显示控件。

我建议 default.aspx.designer.vb 文件可能已过时。建议是删除该文件,创建一个同名的空文件,打开解决方案,然后重新保存 default.aspx 文件以重新生成设计器文件。我这样做了,它没有任何影响。

我没有在我的系统上安装任何更新。

我用作此应用程序基础的其他 VS 网络应用程序解决方案仍然可以正常运行。他们没有在他们的设计视图中显示这个问题。

所有代码都本地存储在与 Visual Studio 相同的计算机上。未使用版本控制。

这实际上是我第二次在这个项目中遇到这个问题。它发生在两天前。那时我开始了一个新的解决方案文件,从头开始重新创建了 default.aspx(和代码隐藏),然后复制了我的其他代码(类、模块和文本文件)。这就是我现在正在使用的解决方案文件,正如我所提到的,它昨天运行良好。在这两种情况下,当我当天关闭项目时,我碰巧在表单上有相同的控件集。我没有尝试向表单添加另一个控件。

4

1 回答 1

1

这与 OnInit方法有关。

此问题的一种解决方法是在调用后检查我们是否处于设计模式base.OnInit()

protected override void OnInit( EventArgs e)
{
   base.OnInit(e);
   if(!this.DesignMode)
   {
      // place code here for dynamic control creation
         TextBox txtUserName = new TextBox();
         txtUserName.ID= "UserID"  ;
         usersPlaceholder.Controls.Add(txtUserName);
   } 
}

视觉 Web 开发团队也意识到了这个问题,他们说:

this is a bug in VS 2010 that we’re now calling the OnInit() method at the 
design time; we are considering a fix for this in a future release of 
VisualStudio.

在他们的博客上查看此问题的完整详细信息

于 2013-08-07T05:46:00.960 回答