我用了两个页面 和两个控件datalist控件
第一个datalist控件是select *的 没有where的
第二个datalist控件是 select * from whereid=@id的
也就是第一个控件 是所有商品
第二个控件是单个商品
但是我当从第一个控件跳到第二个单个商品的时候出现错误
错误类型回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentException: 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
我下边把两个代码发下
第一个控件
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl"  Debug="true"%>
<asp:DataList ID="DataList1" runat="server">
    <ItemTemplate>
      <table>  
      <tr><td><asp:ImageButton ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></td></tr>
      <tr><td>
        <asp:Label ID="Label1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"id") %>'></asp:Label>
        </td></tr>
        <tr><td>
         <asp:Label ID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"name") %>'></asp:Label>
        </td></tr>
        
     </table>
        <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
        
    </ItemTemplate>
</asp:DataList>public partial class WebUserControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Class1 aas = new Class1();
  //     string id= Request.QueryString["id"];
        string id = "1";
       string str = "select * from member where id>@id";
   ;
       SqlConnection con =new SqlConnection("Data Source=ZH-B0140C4856DE;DataBase=ycw;User ID=sa;PWD=owen2000");
       con.Open();
       SqlDataAdapter ssd = new SqlDataAdapter(str,con);
        SqlParameter[] parms={aas.MakeInParam("@id",SqlDbType.BigInt,50,id)};
    
        
        ssd.SelectCommand.CommandType=CommandType.Text;
        if (parms != null)
        {
            foreach (SqlParameter pp in parms)
                ssd.SelectCommand.Parameters.Add(pp);
        
        }
        DataSet ds = new DataSet();
        ssd.Fill(ds);
        DataList1.DataSource = ds.Tables[0].DefaultView;
        DataList1.DataKeyField = "id";
        DataList1.DataBind();
        con.Close();    }
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        int id =DataList1.SelectedIndex;
        Response.Redirect("ima.aspx?id=DataList1.SelectedIndex");
    }
}
第二个控件<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUser.ascx.cs" Inherits="WebUser" %>
<asp:DataList ID="DataList2" runat="server">
    <ItemTemplate>
      <table>  
      <tr><td><asp:ImageButton ID="ImageButton2" runat="server" OnClick="ImageButton1_Click" /></td></tr>
      <tr><td>
        <asp:Label ID="Label3" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"id") %>'></asp:Label>
        </td></tr>
        <tr><td>
         <asp:Label ID="Label4" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"name") %>'></asp:Label>
        </td></tr>
        
     </table>
        <asp:LinkButton ID="LinkButton2" runat="server">LinkButton</asp:LinkButton>
        
    </ItemTemplate>
public partial class WebUser : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {        Class1 aas = new Class1();
           string id= Request.QueryString["id"];
      
        string str = "select * from member where id=@id";
        ;
        SqlConnection con = new SqlConnection("Data Source=ZH-B0140C4856DE;DataBase=ycw;User ID=sa;PWD=owen2000");
        con.Open();
        SqlDataAdapter ssd = new SqlDataAdapter(str, con);
        SqlParameter[] parms ={ aas.MakeInParam("@id", SqlDbType.BigInt, 50, id) };
        ssd.SelectCommand.CommandType = CommandType.Text;
        if (parms != null)
        {
            foreach (SqlParameter pp in parms)
                ssd.SelectCommand.Parameters.Add(pp);        }
        DataSet ds = new DataSet();
        ssd.Fill(ds);
        DataList1.DataSource = ds.Tables[0].DefaultView;
        DataList1.DataKeyField = "id";
        DataList1.DataBind();
        con.Close();    }
}我设了一个user.aspx文件 还设了一个 ima.aspx 把两个空间拖进去 然后点击第一个datalist里的图像控件 跳转 结果出错误了
倒地哪里出错误了 请高手帮忙找一下错误

解决方案 »

  1.   

    <pages enableEventValidation="false"/>
      

  2.   

    string id= Request.QueryString["id"]; 
    =======================================
    以上的代码,楼主取到了id吗?
      

  3.   

    Response.Redirect("ima.aspx?id=DataList1.SelectedIndex"); 
    这个不能得到id吧?
      

  4.   

    第一个控件里的imagebutton直接写 protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 事件 貌似没用的吧写在DataList的 ItemCommand事件中,设置下imagebutton的 CommandName属性 比如"aa", 绑定下CommandArgument的值, CommandArgument='<%#Eval("id") %>'protected void DataListProduct_ItemCommand( object source, DataListCommandEventArgs e )
        {
            if( e.CommandName == "aa" )
            {   
                int id = int.Parse( e.CommandArgument );
                Response.Redirect("url.aspx");        }
        }  
      

  5.   

    修改下protected void DataListProduct_ItemCommand( object source, DataListCommandEventArgs e )
        {
            if( e.CommandName == "aa" )
            {   
                int id = int.Parse( e.CommandArgument );
                Response.Redirect("ima.aspx?id="+id);        
            }
        }