none
ListView LayoutTemplate runat="server" 编译错误 RRS feed

  • 问题

  • 你好,

    出错环境是 : VS2008 C# Web

    在ListView控件里面的LayoutTemplate ,我有一个table 的模版头,由于我需要在后天代码动态控制这个table的属性,然后我给这个table标签加上runat="server" ,结果运行的时候就会报编译错误:(看下图)

    编译器错误消息: CS1502: 与“System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)”最匹配的重载方法具有一些无效参数

    源错误:

    行 86:          onitemcommand="ListView1_ItemCommand" >                
    行 87:                                 <LayoutTemplate>
    行 88:                        <table width="100%" border="0" align="center" runat="server" 
    行 89:                         cellpadding="0" cellspacing="0" class="table_left" style="text-align: center;" >
    行 90:                                 <thead>

    取消这个runat="server"就正常,不知道这是什么原因,如何解决呢?

    (我的目的是在后台代码根据不同的调用去动态调整这个table的border属性,我在td里面都可以加runat="server" 在table怎么不能加呢?)

    2012年12月19日 2:28

答案

  • @编译器错误消息: CS1502: 与“System.Web.UI.HtmlControls.HtmlTableRowCollection.Add

    随便这样的一个代码,直接就在运行时编译出错,完全不需要后台代码

        <asp:ListView ID="ListView1" runat="server">
           <LayoutTemplate>
              <table runat="server">
                 <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                 </tr>
                   <tbody id="itemPlaceholder" runat="server" style="overflow: scroll;">
                   </tbody>
              </table>  
           </LayoutTemplate>
           <ItemTemplate>
               <tr>
                 <td></td>
                 <td></td>
                 <td></td>
                 <td></td>
               </tr>
           </ItemTemplate>
        </asp:ListView>

    [原因]请移除:

    <tbody id="itemPlaceholder" runat="server" style="overflow: scroll;">
     </tbody>

    原因:

    每个普通的Html控件基本都会被转化成标准的一个服务端运行的类(譬如你的table加上runat相当于HtmlTable的功能,而这个类并不包含<tbody>元素。反射源代码如下:

    namespace CSharp
    {
      public class TestPage : Page
      {
        protected HtmlForm form1;
        protected HtmlTable Table1;  //这是反射的结果!

        public TestPage():base()
        {
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }
      }
    }

    建议你:

    1)使用GridView。

    2)使用Table控件:

    或直接动态为某些行/列设置CSS样式。


    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月19日 7:05

全部回复

  • 怎么半天没人回复?看来这里人气少呀!

    那位大哥碰到过这样的问题。。。

    2012年12月19日 5:15
  • @编译器错误消息: CS1502: 与“System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)”最匹配的重载方法具有一些无效参数

    不一定是runat的问题,请仔细核对一下后台cs代码中调用Add方法的时候是否输入了匹配的参数。

    或者请给出你的后台Add代码,谢谢。


    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月19日 5:53
  • 我在后台都没有写add的代码,因为我还没有开始写关于这个table 的代码,只是写了ListView1.datasourse = 数据绑定,我将后台代码全部都注释掉都是出同样的问题。

    只要不加runas="server" 就一切正常,加了就报错。后台已经没有执行任何代码了。

    2012年12月19日 6:06
  • 我在后台都没有写add的代码,因为我还没有开始写关于这个table 的代码,只是写了ListView1.datasourse = 数据绑定,我将后台代码全部都注释掉都是出同样的问题。

    只要不加runas="server" 就一切正常,加了就报错。后台已经没有执行任何代码了。


    我在网上搜索这个错误,好像也有很多同样跟加了runat="server"有关的,只是查不到有解决的办法。所以才发贴来问问,看看这个是不是VS开发工具的Bug还是别的什么原因,解决办法是什么。
    2012年12月19日 6:10
  • @编译器错误消息: CS1502: 与“System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)”最匹配的重载方法具有一些无效参数

    不一定是runat的问题,请仔细核对一下后台cs代码中调用Add方法的时候是否输入了匹配的参数。

    或者请给出你的后台Add代码,谢谢。


    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    随便这样的一个代码,直接就在运行时编译出错,完全不需要后台代码

        <asp:ListView ID="ListView1" runat="server">
           <LayoutTemplate>
              <table runat="server">
                 <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                 </tr>
                   <tbody id="itemPlaceholder" runat="server" style="overflow: scroll;">
                   </tbody>
              </table>  
           </LayoutTemplate>
           <ItemTemplate>
               <tr>
                 <td></td>
                 <td></td>
                 <td></td>
                 <td></td>
               </tr>
           </ItemTemplate>
        </asp:ListView>

    2012年12月19日 6:20
  • @编译器错误消息: CS1502: 与“System.Web.UI.HtmlControls.HtmlTableRowCollection.Add

    随便这样的一个代码,直接就在运行时编译出错,完全不需要后台代码

        <asp:ListView ID="ListView1" runat="server">
           <LayoutTemplate>
              <table runat="server">
                 <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                 </tr>
                   <tbody id="itemPlaceholder" runat="server" style="overflow: scroll;">
                   </tbody>
              </table>  
           </LayoutTemplate>
           <ItemTemplate>
               <tr>
                 <td></td>
                 <td></td>
                 <td></td>
                 <td></td>
               </tr>
           </ItemTemplate>
        </asp:ListView>

    [原因]请移除:

    <tbody id="itemPlaceholder" runat="server" style="overflow: scroll;">
     </tbody>

    原因:

    每个普通的Html控件基本都会被转化成标准的一个服务端运行的类(譬如你的table加上runat相当于HtmlTable的功能,而这个类并不包含<tbody>元素。反射源代码如下:

    namespace CSharp
    {
      public class TestPage : Page
      {
        protected HtmlForm form1;
        protected HtmlTable Table1;  //这是反射的结果!

        public TestPage():base()
        {
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }
      }
    }

    建议你:

    1)使用GridView。

    2)使用Table控件:

    或直接动态为某些行/列设置CSS样式。


    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月19日 7:05
  • 多谢了,虽然你给的建议我都没有取纳,但是让我知道了问题的根源是<tbody></tbody> 这个标签。

    我直接将<tbody></tbody> 改成 <tr></tr> 问题就解决了,想不到<tbody>不是一个标准的table标签,实在让我想不到。

    再次谢谢!

    2012年12月19日 7:42