这个DataList中继器的实现有什么问题?

时间:2017-08-23 17:01:58

标签: datalist

我在 ascx 中有以下声明,它显示了4列文件名列表。文件名是 xlxs 文件,可以下载,以便在单击文件名时调用命令事件。

<asp:DataList runat="server" ID="dlHistoricalRates" RepeatColumns="4" >
    <HeaderStyle>
    </HeaderStyle>
    <HeaderTemplate>
        <span>Historial Rates</span>
    </HeaderTemplate>        
    <ItemTemplate>           
        <asp:LinkButton id="historicalRate" ClientIDMode="Static" 
          runat="server" CommandArgument='<%# Eval("filename") %>' 
          CommandName="Download" OnCommand="historicalRate_OnCommand" >
              <%# Eval("filename") %>
        </asp:LinkButton>
    </ItemTemplate>        
</asp:DataList>

代码隐藏命令代码:

protected void historicalRate_OnCommand(object sender, CommandEventArgs e)
{
    if (e.CommandName == "Download")
    {
        if (e.CommandArgument != null)
        {
            historicalRate_Download(e.CommandArgument.ToString());                    
        }                
    }
}

CommandArgument是一个空字符串,应该是文件名。我知道快递Eval()正在工作,因为它在控件中显示文件名。

为什么,filename未被传递为CommandArgument

1 个答案:

答案 0 :(得分:0)

您的CommandArgument看起来不错,但另一种方法是从sender对象获取LinkBut​​ton的arg:

protected void historicalRate_OnCommand(object sender, CommandEventArgs e)
{
    // get the reference of clicked LinkButton
    LinkButton lb = sender as LinkButton;
    string cmd = lb.CommandName;
    string arg = lb.CommandArgument;

    if (cmd == "Download")
    {
        if (arg != null)
        {
            historicalRate_Download(arg);                    
        }                
    }
}