关于ASP.NET回发或回调参数无效问题的解决办法

功能实现:在DataList中单击ImageButton,显示产品图片的详细信息”

 

问题:   今早折腾着要在一个网站的首页显示新产品的图片,鉴于要横向显示大概十个新品图片,于是采用了DataList控件,并在编辑模板是填入了ImageButton控件,同时动态绑定了数据库,为了便于理解,代码如下:

设计代码:

<asp:DataList ID="DataList1" runat="server" RepeatColumns="10"  onitemcommand="DataList1_ItemCommand">
                <ItemTemplate>
                        <asp:ImageButton ID="ImageButton2" runat="server" CommandName="select" Height="60px" Width="60px"
                            ImageUrl='<%# DataBinder.Eval(Container.DataItem,"ProPictures") %>' />
                        &nbsp;&nbsp;
                </ItemTemplate>
 </asp:DataList>

事件代码如下:

protected void Page_Load(object sender, EventArgs e)//页面加载时对数据库进行绑定
    {
            string dbStr = "Data Source=Localhost;Initial Catalog=EC; Integrated Security=SSPI;";
            SqlConnection con = new SqlConnection(dbStr);

            //SqlConnection strcon = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["strcon"]);
            con.Open();
            string sqlStr = "SELECT ProCode, ProPictures FROM Products WHERE ProProperty = '新品'";


            SqlDataAdapter sda = new SqlDataAdapter(sqlStr, con);

            DataSet ds = new DataSet();
            sda.Fill(ds, "tb_NewPic");
            if (ds.Tables["tb_NewPic"].Rows.Count != 0)
            {
                this.DataList1.DataSource = ds.Tables["tb_NewPic"];
                this.DataList1.DataKeyField = "ProCode";
                this.DataList1.DataBind();
            }
            else
            {
                lblNewPicMessage.Visible = true;
                lblNewPicMessage.ForeColor = System.Drawing.Color.Red;
                lblNewPicMessage.Text = "<br>暂无新品纪录...";
            }
    }
    protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (Session["CustomerName"] == null)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('请先登录!');", true);
        }
        else
        {
            string ProID = DataList1.DataKeys[e.Item.ItemIndex].ToString();
            Response.Redirect("~/Products/ProductDetails.aspx?ProCode=" + ProID);
        }
    }

现象:运行后界面正常,当点击新品图片查看详细信息时,页面出现如下错误提示

回发或回调参数无效。在配置中使用   <pages   enableEventValidation= "true "/>   或在页面中使用   <%@   Page   EnableEventValidation= "true "   %>   启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用   ClientScriptManager.RegisterForEventValidation   方法来注册回发或回调数据以进行验证。

如果在网站设计界面第一行加入EnableEventValidation= "false"则点击新品图片后,页面刷新,根本不执行我们的DataList1_ItemCommand 事件,你是否想到用别的控件呢,LinkButton不会出现这些的问题,但是它无法显示图片,image控件可以显示图片,却没有CommandName属性,不能触发DataList1_ItemCommand 事件,如此等等。

解决方略:

经过一个上午的奋斗,最终的解决办法让我有点吐血,因为太简单了*^_^*汗颜

在Page_Load事件中加一行代码:

protected void Page_Load(object sender, EventArgs e)//页面加载时对数据库进行绑定
{

    if (!IsPostBack)

    {

    //拷贝绑定数据源代码到这里,别的地方均不要修改

    }

}

我一个上午的血泪的成长经验,希望对大伙有帮助

 

博观约取,厚积薄发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值