ScriptManager和UpdatePanel在命名空间System.Web.UI中未找到。

11
我有一个MVC4/Web API项目,我创建了一个测试页面,使用Ajax消耗Web API。测试进行得很顺利,所以我开始着手UI界面的工作。我需要做的一件事是用从Web API返回的数据填充一些表单控件。我使用了JQuery来完成这个任务。
现在,当我运行应用程序并提交表单时,会出现一个错误指示页面已被更新:
Invalid postback or callback argument.  Event validation is enabled using <pages
enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %>
in a page.  For security purposes, this feature verifies that arguments to postback 
or callback events originate from the server control that originally rendered them.  
If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation
method in order to register the postback or callback data for validation.

为解决此问题,我将表单控件包装在UpdatePanel中,并添加ScriptManager控件。现在在构建时出现以下错误:
The type or namespace name 'ScriptManager' does not exist in the namespace 
'System.Web.UI' (are you missing an assembly reference?) C:\Users\xxx\Documents\
Visual Studio 2012\Projects\xxxxxxxxx\xxxxxxxx.Web.API\Public\
xxxxxxxxxxx.aspx.designer.cs    31  41  xxxxxxxx.Web.API

并且

The type or namespace name 'UpdatePanel' does not exist in the namespace 
'System.Web.UI' (are you missing an assembly reference?)    C:\Users\xxx\Documents\
Visual Studio 2012\Projects\xxxxxxxx\xxxxxxxx.Web.API\Public\
xxxxxxxxxxx.aspx.designer.cs    40  41  xxxxxxxx.Web.API

我已经完全清理了我的解决方案。删除了 obj/Debug 和 obj/Release 文件夹。我研究了这两个问题,它们似乎经常一起出现。我安装了 AjaxControlToolbox,但没有什么变化。
是否需要手动添加某些内容到 web.config 文件中或者我应该寻找其他的解决方案?

你是使用MVC还是WebForms?UpdatePanel和ScriptManager是WebForms控件。 - Garrison Neely
我正在使用MVC4。由于我的Ajax代码更新了表单控件的内容,因此我收到了一个错误(如上所示)。对于MVC4 / Web API应用程序,是否有不同的解决方案? - rwkiii
6个回答

38

在项目中添加对System.Web.Extensions程序集的引用。选择“项目”->“添加引用”,然后选择程序集名称。


2
这个没有任何作用。 - ajeh
2
这对我来说解决了问题,在将.NET WebForms项目从.NET 4.5升级到4.6.1后,出现了错误,因此添加对System.Web.Extension的引用解决了问题。 - Cristian Cotovan

7

对我来说问题是设计师生成了一个写着 System.Web.UI.WebControls.ScriptManager 的行而不是 System.Web.UI.ScriptManager,我认为这是因为我给它一个 id 属性,而它不需要。


1
谢谢,这个修复方法对我很有效!不确定为什么生成的代码中命名空间是错误的。 - TabbyCool

5

只需在.aspx文件中添加行

<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web"%>

并重新构建即可!


今晚这个对我有用。此外,我只关注使一个aspx页面成功运行。我还删除了当前工作目录中的旧aspx.cs和aspx.designer.cs文件副本。然后,我通过将./App_GlobalResources/Resource.resx中的Resources.Resource重命名为Resources.Resource5来消除了资源命名冲突。我使用xsp4 --verbose测试了我的aspx页面,而不是mod_mono_server4。最后,我使用xbuild编译,而不是使用Xamarin ASP.NET插件的MonoDevelop。如果需要,请给我留言,我会尽力帮助您。 - Frank

5

我理解为什么Garrison指出了MVC / Web Forms的区别。我在我的MVC网站上有一些.aspx页面,仅用于测试。

但是,我的问题是通过将项目的目标框架设置为3.5,然后再将其更改回4.0来解决的。


5
对我来说问题是设计者生成了一行代码,写着 System.Web.UI.WebControls.ScriptManager 而不是 System.Web.UI.ScriptManager。(我想这是因为我给它加了一个id属性,而其实它不需要这个属性。) - Dave Cousineau
1
太神奇了!我正在从3.5升级到4.5.2,但这个转换导致编译失败。现在我回滚到了3.5然后又回到了4.5.2,它终于可以用了。微软真的是有点东西不对劲。 - ajeh

4

对我来说,当我复制/粘贴ScriptManagerUpdatePanel块时,就会出现这个问题。项目模板中没有预先包含Systems.Web.Extensions引用,仅仅复制/粘贴不会自动添加引用。添加引用后,错误消失了。

我正在使用.Net 3.5。我没有安装任何其他框架,所以这种方法解决了我的问题。


1
我们遇到了"The type or namespace name 'ScriptManager' does not exist in the namespace 'System.Web.UI'"的错误。
然而,对于我们来说,IDE和构建输出不匹配:构建输出显示了错误,而IDE没有突出显示任何错误。我们尝试了清理、重新构建等操作,但都没有起作用。
所以,我们做了以下操作:
  • 关闭了Visual Studio。
  • 删除了.vsbinobj目录。
  • 重新启动了Visual Studio。
现在一切正常了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接