I'm upgrading a big web site project from Visual Studio 2010 to 2012. Throughout my project, I have table
elements with the runat="server"
attribute. Many of these have thead
elements inside of them. When I open it in 2012 and and try to build, I get the following error:
Value of type 'System.Web.UI.HtmlControls.HtmlGenericControl' cannot be converted to 'System.Web.UI.HtmlControls.HtmlTableRow'
Removing the runat="server"
attribute or commenting out thead
fixes it. Commenting out only the tr
element inside of thead
does not fix it. Here is a simplified example that reproduces the problem:
<%@ 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>
The error occurs where the table
element opens.
How can I fix this without doing one of the following?
- Removing the
runat="server"
attribute - Removing the
thead
element - Changing it to an
asp:table
element
Bonus up vote for someone who explains what 2012 is doing differently that is causing this.
UPDATE:
The problem does not occur in a web app, only in a web site.
The project isn't actually be upgraded, just my development environment. In both cases, I'm using the 4.0 framework
I tried using the 4.5 framework, but it didn't help.
Sept 10th, 2012: I have an open case with Microsoft support. Their dev team is looking into it.
Oct. 24, 2012: Since .NET 4.5 replaces 4.0, I can no longer compile in VS 2010 also. The problem I am experiencing is purely .NET - not Visual Studio.
Fix for this issue is available now. http://support.microsoft.com/kb/2750149 for windows 8 and http://support.microsoft.com/kb/2750147 for Windows 7 platform.
For partial solution you can move that <th>
front-end code to the back-end code.
That should take care of the compilation problem.
Don't know what to do about <tbody>
tags though.
If you view HTML of your page as it stands now, I doubt that they render anyway.
Here is why.
Microsoft has confirmed this is a bug. They will create a hot fix for it, and include the fix in the next service pack. It doesn't sound like this is a high priority, so it will probably take a while for the hot fix.
2012-10-01 Update: Microsoft support contacted me and said this will be fixed in an upcoming hot fix "soon".
2012-11-28 Update: Visual Studio 2012 Update 1 does not fix the problem.
Simple solution remove tags tbody and thead, for me worked.
I don't have VS 2012; right now but you should try following things
- Can you verify changing DOCTYPE. (to transitional, frame-set, 1.1 or html 5 etc)
- Put the whole table inside asp:placeholder
Yes Its a bug in Visual Studio 2012,Applying the patch from below mentioned link has worked for me: http://www.microsoft.com/en-us/download/details.aspx?id=36359
Removing the tag won't solve it out for a current/migrating running project. In that way we have to change each and every aspx page.
来源:https://stackoverflow.com/questions/12148825/how-do-i-include-thead-in-a-runat-server-table-element