相关疑难解决方法(0)

如何在runat ="server"表元素中包含thead?

我正在将一个大型网站项目从Visual Studio 2010升级到2012年.在整个项目中,我都有属性的table元素runat="server".其中许多都有其中的thead元素.当我在2012年打开它并尝试构建时,我收到以下错误:

Value of type 'System.Web.UI.HtmlControls.HtmlGenericControl' cannot be converted to 'System.Web.UI.HtmlControls.HtmlTableRow'
Run Code Online (Sandbox Code Playgroud)

删除runat="server"属性或注释掉thead修复它.只注释掉tr里面的元素thead并不能解决它.以下是重现问题的简化示例:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test.aspx.vb" Inherits="Test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table id="Example" runat="server">
            <thead>
                <tr>
                    <th>test</th>
                </tr>
            </thead>
        </table>
    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

table元素打开时会发生错误.

如何在不执行以下操作之一的情况下解决此问题?

  • 删除runat="server"属性
  • 删除thead元素
  • 将其更改为asp:table元素

为那些解释2012年正在采取不同行为导致此问题的人投票.

更新:

Web 应用程序中不会出现此问题,仅在网站中出现此问题.

该项目实际上并未升级,只是我的开发环境.在这两种情况下,我都在使用4.0框架

我尝试使用4.5框架,但它没有帮助.

2012年9月10日:我有一个微软支持的开放案例.他们的开发团队正在研究它. …

asp.net upgrade visual-studio-2010 vs-web-site-project visual-studio-2012

19
推荐指数
1
解决办法
6851
查看次数

将.NET Framework 3.5迁移到4.5时出错

我们正在将Web应用程序从.NET framework 3.5迁移到4.5

在我们的开发机器上,我们使用VS2012并运行Windows 7操作系统

在这个过程中,我们得到以下错误

基类包含字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型(System.Web.UI.HtmlControls.HtmlElement)不兼容

相应的HTML是

<html xmlns="http://www.w3.org/1999/xhtml" class="no-js" runat="server" id="htmlTag">
Run Code Online (Sandbox Code Playgroud)

相应的设计师代码是(.cs.designer文件)

protected global::System.Web.UI.HtmlControls.HtmlGenericControl htmlTag;
Run Code Online (Sandbox Code Playgroud)

这里有完整的堆栈跟踪

System.Web.HttpParseException(0x80004005):基类包含字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型(System.Web.UI.HtmlControls)不兼容. HtmlElement元素).在System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration(ControlBuilder助洗剂)在System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder助洗剂,布尔fInTemplate,布尔topLevelControlInTemplate,PropertyEntry PSE)在System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder助洗剂,布尔fInTemplate,布尔值topLevelControlInTemplate,PropertyEntry pse)位于System.Web.Complation.Bs上的System.Web.Compilation.CopDomTreeGenerator.BuildMiscClassMembers(),System.Web.Compilation.BaseCodeDomTreeGenerator.BuildMiscClassMembers() System.Web.Co上System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode(AssemblyBuilder assemblyBuilder)的.Compilation.BaseCodeDomTreeGenerator.GetCodeDomTree(CodeDomProvider codeDomProvider,StringResourceBuilder stringResourceBuilder,VirtualPath virtualPath)系统中System.Web.Compilation.BuildProvidersCompiler.PerformBuild()的System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()处的System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider)上的mpilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider). System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert的System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildInPrecompile,Boolean throwIfNotFound,Boolean ensureIsUpToDate)中的Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) (HttpContext上下文,VirtualPath virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildInPrecompile,Boolean throwIfNotFound,Boolean ensureIsUpToDate)System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath,HttpContext context,Boolean allowCrossApp,Boolean throwIfNotFound)at Syste System.Web上的System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext上下文,String requestType,VirtualPath virtualPath,String physicalPath)中的m.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath,Type requiredBaseType,HttpContext context,Boolean allowCrossApp). System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)中的HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()错误方法:Void AddBuildProvider(System.Web.Compilation.BuildProvider)帮助链接:

要解决此问题,我们按照此链接中给出的步骤进行操作http://support.microsoft.com/kb/941824/en-us

本质上我们只是剪切HTML并将其粘贴回来..设计器代码重新生成如下

protected global::System.Web.UI.HtmlControls.HtmlElement htmlTag;
Run Code Online (Sandbox Code Playgroud)

这看起来是修复问题的合理方法,它也适用于少数几台机器,但同样的修复程序破坏了其他开发人员机器上的代码,特别是部署到我们的生产Web服务器的代码.请注意,我们在生产服务器上运行Windows Server 2008 R2 Datacenter,并在计算机上安装了.Net Framework 4.5.以下是我们在更改后得到的错误

基类包含字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlElement)与控件类型不兼容(System.Web.UI.HtmlControls.HtmlGenericControl)

您会看到错误消息与此帖子中的第一条错误消息正好相反

在那些现在出错的机器中,如果我们只是将控件的类型留给HTMLGenericControl错误消失了

我们试图在工作的机器上比较.net框架相关的服务包与那些没有的机器,我们真的没有注意到可能导致错误的任何东西

这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与他们每个人就修复当地环境的方式进行协调.更重要的是,我们无法通过更改来检入此文件,因为它会为许多人打破并将其发布到生产中也很困难 …

.net asp.net

6
推荐指数
1
解决办法
3153
查看次数