无法将带有[]的索引应用于“object”类型的表达式

时间:2013-08-08 14:54:32

标签: c# asp.net

到目前为止,这就是我所拥有的。

protected void CategoryRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Object dataItem = e.Item.DataItem;

        // code to pull catid out of dataItem
    }

以下是在debug中运行后dataItem包含的示例:

  

dataItem = {TextCategory =“辐射(释放或污染)”,   catid = 4,TextResult =“请参阅紧急计划并在代码下报告   332.54(A)“,IsReportable = True}

我想将catid从对象中拉出来。我已经尝试过投射它,但所有投射它的尝试都没有成功。我的目标是将这个catid用于嵌套转发器的数据绑定...这样的事情:

using (NERAEntities entities = new NERAEntities())
{
    var Questions = (from x in entities.Questions
                   where x.CategoryID == catid
                   select new { QuestionText = x.Text }); 


    QARepeater.DataSource = Questions;
    QARepeater.DataBind();
}

3 个答案:

答案 0 :(得分:4)

问题是DataItem本身并没有真正的类型(它是一个Anonymous类)。你需要使用它:

dynamic dataItem = e.Item.DataItem ;
int catId = dataItem.catid ;

显然,如果实际对象没有catId属性,这将在运行时失败。

答案 1 :(得分:0)

假设您正在使用的对象类型称为DataItem,请尝试以下操作:

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataItem dataItem = (DataItem) e.Item.DataItem;

        // code to pull catid out of dataItem
    }

答案 2 :(得分:0)

可能你可以试试:

protected void CategoryRepeater_ItemDataBound(object sender, 
    RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || 
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView row = (DataRowView)e.Item.DataItem;
        int? catID = row["catid"] as int;
    }
}