System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。参数名称:index

时间:2016-04-06 06:41:47

标签: c# asp.net

我收到此错误 System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。 参数名称:index

来源错误:

  

第153行:会话[“Cat”] = e.CommandArgument.ToString();
  第154行:
  第155行:会话[“Cat_ID”] =   DataList3.DataKeys [e.Item.ItemIndex]的ToString(); //错误
  第156行:Response.Redirect(“Disp_Category.aspx?id = C”);   第157行:}

请问这个代码有什么问题

protected void DataList3_ItemCommand(object source, DataListCommandEventArgs e)
 {
     Session["L_Id"] = ddlLanguage.SelectedValue;
     Session["Cat"] = e.CommandArgument.ToString();

     Session["Cat_ID"] = DataList3.DataKeys[e.Item.ItemIndex].ToString();
     Response.Redirect("Disp_Category.aspx?id=C");
 }

在aspx文件上我有这个

<asp:DataList ID="DataList3" runat="server" DataKeyNames="C_Id" DataSourceID="SqlDataSource3" OnItemCommand="DataList3_ItemCommand">
                                <ItemTemplate>
                                    <table cellpadding="0" cellspacing="0" border=1 width=150>
                                        <tr>
                                            <td>
                                                <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("C_Name") %>'
                                                    Text='<%# Eval("C_Name") %>' CausesValidation="False"></asp:LinkButton></td>
                                        </tr>
                                    </table>
                                </ItemTemplate>
                            </asp:DataList><asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\New Projects\Sym\App_Data\Music.mdf;Integrated Security=True;User Instance=True"
                                ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM [Category] ORDER BY [C_Name]">
                            </asp:SqlDataSource>

1 个答案:

答案 0 :(得分:0)

你不对。 我建议在CommandArgument中设置id(c_id)而不是名称(c_name)。 这是你的关键。在ItemCommand中,您可以按ID获取整个记录。 此外:

Response.Redirect("Disp_Category.aspx?id=C");

变为

Response.Redirect("~/Disp_Category.aspx?id=C");  //id=C? sure?