异常详细信息: System.InvalidCastException: 指定的转换无效。源错误: 
行 59:  Label lblAcCount = (Label) e.Item.FindControl("lblAcCount");
行 60:  //找到分类Repeater关联的数据项 
行 61:  DataRowView rowv = (DataRowView)e.Item.DataItem; 
行 62:  //提取分类ID 
行 63:  int arId = Convert.ToInt32(rowv["aId"]);
 源文件: c:\inetpub\wwwroot\yoxublog\default.aspx.cs    行: 61 源文件如下,在其他页面上,同样是用这个代码是可以,为什么在这里不行呢?
private void repMain_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)  


Label lblAcCount = (Label) e.Item.FindControl("lblAcCount");
//找到分类Repeater关联的数据项 
DataRowView rowv = (DataRowView)e.Item.DataItem; 
//提取分类ID 
int arId = Convert.ToInt32(rowv["aId"]);
int num = bll.article.GetArtCommentCount(arId);
lblAcCount.Text =num.ToString();
}
}

解决方案 »

  1.   

    堆栈跟踪: 
    [InvalidCastException: 指定的转换无效。]
       yoxublog._default.repMain_ItemDataBound(Object sender, RepeaterItemEventArgs e) in c:\inetpub\wwwroot\yoxublog\default.aspx.cs:61
       System.Web.UI.WebControls.Repeater.OnItemDataBound(RepeaterItemEventArgs e) +110
       System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +139
       System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +474
       System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +48
       System.Web.UI.WebControls.Repeater.DataBind() +23
       yoxublog._default.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\yoxublog\default.aspx.cs:29
       System.Web.UI.Control.OnLoad(EventArgs e) +67
       System.Web.UI.Control.LoadRecursive() +35
       System.Web.UI.Page.ProcessRequestMain() +750 
      

  2.   

    这个问题是由于e.Item.FindControl("lblAcCount");并没有找到lblAcCount这个控件,该方法返回的值为null,对null做类型转换就会出现上面的错误。
    ==》为什么在这里不行呢?
    请检查这个页面的数据绑定控件的模板列中是否有叫lblAcCount的Label控件。
      

  3.   

    <TABLE width="100%" cellpadding="1" cellspacing="0">
    <asp:Repeater id="repMain" runat="server" >
    <ItemTemplate>
    <tr height="2">
    <td colSpan="2"></td>
    </tr>
    <TR>
    <TD colSpan="2" align="center"><%#DataBinder.Eval(Container.DataItem,"aTitle")%>
    </TD>
    </TR>
    <tr height="3">
    <td colSpan="2"></td>
    </tr>
    <TR>
    <TD colSpan="2"><%#DataBinder.Eval(Container.DataItem,"aContent")%>
    </TD>
    </TR>
    <tr height="1">
    <td colSpan="2"></td>
    </tr>
    <TR>
    <td width="50%">&nbsp;<A class="H1" href="category.aspx?cateid=<%#DataBinder.Eval(Container.DataItem,"acId")%>"><%#DataBinder.Eval(Container.DataItem,"acCategory")%></A>&nbsp;|&nbsp;<A class="H1" href="article.aspx?articleid=<%#DataBinder.Eval(Container.DataItem,"aId")%>">发表评论</A>&nbsp;<asp:Label ID="lblAcCount" Runat="server"></asp:Label>&nbsp;条</td>
    <TD align="right" width="50%"><%#DataBinder.Eval(Container.DataItem,"aDate")%></TD>
    </TR>
    </ItemTemplate>
    <SeparatorTemplate>
    <tr>
    <td height="1" colspan="2" bgcolor="#d4dded"></td>
    </tr>
    <tr>
    <td height="6" colspan="2"></td>
    </tr>
    <tr>
    <td height="1" colspan="2" bgcolor="#d4dded"></td>
    </tr>
    </SeparatorTemplate>
    </asp:Repeater>
    </TABLE>
      

  4.   

    这个问题,是由以下语句引起的
    行 60: //找到分类Repeater关联的数据项 
    行 61: DataRowView rowv = (DataRowView)e.Item.DataItem; 
    因为e.Item.DataItem并非DataRowView 类型,而并非找不到控件造成。