asp.net中的Datalist?ItemCommand事件没有解雇?

Sur*_*har 4 .net asp.net datalist

在我的网络应用程序中,我有一个数据列表,我绑定一些图像.在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> 
Run Code Online (Sandbox Code Playgroud)

事件处理程序:

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)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码.cs代码

Phi*_*ith 7

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

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) 
    } 
}
Run Code Online (Sandbox Code Playgroud)

这不行.你不能在回发后数据绑定.否则,将取消任何挂起的事件处理程序请

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


Nak*_*nch 5

你什么时候绑定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
   }
}
Run Code Online (Sandbox Code Playgroud)

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

看看这篇涵盖 Page.IsPostBack 属性的MSDN 文章