【问题标题】:Datalist in asp.net? ItemCommand event not firing?asp.net中的数据列表? ItemCommand 事件未触发?
【发布时间】:2010-07-20 09:36:56
【问题描述】:

在我的 Web 应用程序中,我有一个数据列表,其中我正在绑定一些图像。在 datalist itemcommand 事件中,我编写了一些未触发的代码,我的意思是 itemcomand 事件未触发。你能帮我吗。 这是我的源代码

DataList 控件:

<asp:DataList ID="DLQuickVideos" runat="server"  RepeatColumns ="2" CellPadding="0" CellSpacing="0" OnItemCommand="DLQuickVideos_ItemCommand" >                       
     <ItemTemplate>                                        
         <asp:ImageButton ID="imgbtn" runat="server" ImageUrl='<%# "../Trailorvideos/"+ Eval("SnapShot") %>' CommandArgument='<%# Eval("video")+"|"+Eval("videoid") %>' CausesValidation="false"  Width="111px" Height="83px" BorderStyle="double" BorderWidth="4px" BorderColor="#A70202" />                                                                    
     </ItemTemplate>
</asp:DataList> 

事件处理程序:

protected void DLQuickVideos_ItemCommand(object source, DataListCommandEventArgs e)
{        
    try
    {
        string eval = e.CommandArgument.ToString();
        int k = eval.IndexOf("|");
        videoname = eval.Substring(0, k);
        videoid = eval.Substring(k + 1);
        string move = Request.QueryString["movie"].ToString();

        if (Request.Browser.Browser == "IE")
        {
            dvplayer.InnerHtml = "<object id='player' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' name='player' width='500' height='350'>      <param name='movie' value='player-viral.swf' />     <param name='allowfullscreen' value='true' />       <param name='allowscriptaccess' value='always' />       <param name='flashvars' value='file=~/User/Trailorvideos/" + videoname + "&autostart=true' />   <p><a href='http://get.adobe.com/flashplayer'>Get Flash</a> to see this player.</p>         </object>";
        }
        else
        {
            dvplayer.InnerHtml = "<object type='application/x-shockwave-flash' data='player-viral.swf' width='500' height='350'> <param name='movie' value='player-viral.swf' /> <param name='allowfullscreen' value='true' /> <param name='allowscriptaccess' value='always' /> <param name='flashvars' value='file=~/User/Trailorvideos/" + videoname + "&autostart=true' /> <p><a href='http://get.adobe.com/flashplayer'>Get Flash</a> to see this player.</p> </object>";
        }
        GetQuickList(videoid);
    }
    catch (Exception ex)
    {

    }
}

以上代码.cs代码

【问题讨论】:

  • 您是否将事件处理程序绑定到控件?能否贴出相关代码(后面的代码和aspx/ascx)?
  • 源代码............

标签: .net asp.net datalist


【解决方案1】:

您已发布这是您的页面加载事件:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) //this IF statement is what prevents re-binding on PostBack 
    { 
        GetQuickList(videoid, moviename); 
    } 
    else 
    { 
        GetQuickList(videoid, moviename) 
    } 
}

这行不通。您不得在回发时进行数据绑定。否则,任何待处理的事件处理程序请求都会被取消。

您必须删除此 if 语句的 else 部分。

【讨论】:

  • 所以当 IsPostback 为真时我们不绑定。其他明智的事件或未触发
  • 我的意思是当我们在 IsPostback 中绑定数据为真时,事件不会被触发,我说得对,菲利普史密斯先生。
【解决方案2】:

什么时候绑定 DataList?如果 DataList 在 PageLoad 上绑定,但您没有处理 PostBack,那么所有附加的事件处理程序都将丢失,因为 DataList 被重新绑定。在这种情况下永远不会引发 ItemCommand 事件。

确保您的 Page_Load 方法的结构如下:

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)  //this IF statement is what prevents re-binding on PostBack
   {
      //Bind DataList
   }
}

上面的代码将确保 DataList 不会在 PostBack 上重新创建。

看看这个涵盖 Page.IsPostBack 属性的MSDN article

【讨论】:

  • protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) //这个 IF 语句防止在 PostBack 上重新绑定 { GetQuickList(videoid, moviename); } else { GetQuickList(videoid, moviename) } }
  • 你能在 DLQuickVideos_ItemCommand 中打断点吗?
【解决方案3】:

为按钮添加命令名称。我想这就是原因。

HTH。

【讨论】:

  • 是的,我刚才试过那个,它没有进入那个 itemcommand 事件。我写 response.write("hai") 它没有显示那个消息 Mr.Brain
  • 暂时尝试使用按钮,并设置尝试使用 UseSubmitBehavior="false"。
【解决方案4】:

我的猜测是您没有在回发时对 DataList 进行数据绑定。如果控件未绑定数据,则不会触发事件。您能否发布执行数据绑定的代码,可能在 Page_Load 中?

【讨论】:

  • 这是我的绑定代码 protected void GetQuickList(string vidid) { string squery123 = "select * from Trailor_videos where movie='"+movie+"' and Trailor_videos.videoid!=" + vidid; da = new SqlDataAdapter(squery123, con); ds = 新数据集(); da.Fill(ds, "temp"); DLQuickVideos.DataSource = ds.Tables["temp"]; DLQuickVideos.DataBind(); }
【解决方案5】:

这行得通:

标记:

<asp:DataList ID="DLQuickVideos" runat="server"  RepeatColumns ="2" CellPadding="0" CellSpacing="0" OnItemCommand="DLQuickVideos_ItemCommand" >                       
     <ItemTemplate>                                        
         <asp:ImageButton ID="imgbtn" runat="server" ImageUrl='xx' CommandArgument='<%# "test" + "|" + Eval("Test") %>' CausesValidation="false"  Width="111px" Height="83px" BorderStyle="double" BorderWidth="4px" BorderColor="#A70202" />                                                                    
     </ItemTemplate>
</asp:DataList>

后面的代码:

protected void Page_Load(object sender, EventArgs e)
        {


            {
                if (!IsPostBack)  //this IF statement is what prevents re-binding on PostBack
                {
                    System.Data.DataTable dt = new System.Data.DataTable();
                    dt.Columns.Add(new System.Data.DataColumn("test", typeof(int)));

                    System.Data.DataRow r = dt.NewRow();
                    r["test"] = 1;
                    dt.Rows.Add(r);

                    r = dt.NewRow();
                    r["test"] = 2;
                    dt.Rows.Add(r);

                    this.DLQuickVideos.DataSource = dt;
                    this.DLQuickVideos.DataBind();
                }
            }


        }

        protected void DLQuickVideos_ItemCommand(object source, DataListCommandEventArgs e)
        {

            try
            {

            }
            catch (Exception ex)
            {

            }
        }

但我不明白的是你在DLQuickVideos_ItemCommand 中打电话给GetQuickList。做什么的?但是您最初在哪里填充 DataList?

【讨论】:

  • 是的,在页面加载中我正在调用 GetQuickList(videoid, moviename)
  • protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) //这个 IF 语句防止在 PostBack 上重新绑定 { GetQuickList(videoid, moviename); } else { GetQuickList(videoid, moviename) } }
  • 移除GetQuickList(videoid);从你的 DLQuickVideos_ItemCommand !
  • 您能否粘贴在浏览器中为 DataList 呈现的 html?
  • 此代码.....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
相关资源
最近更新 更多