CommandName在源代码中不可见

时间:2015-09-16 21:58:29

标签: c# asp.net events command datalist

我有这段代码

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:DataList ID="DataList1" runat="server" OnItemCommand="DataList1_ItemCommand">
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Command1">
                    <img src="../images/image1.png" alt="" />
                </asp:LinkButton>                                         
            </ItemTemplate>
        </asp:DataList>
    </ContentTemplate>
</asp:UpdatePanel>

和此代码

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
    if (e.CommandName == "Command1")
    {      
        // Never drops here
    }           
}

事件正在触发 但是当我调试时,LinkBut​​ton1的CommandName在源代码中不可见 所以,if语句不起作用。

有什么想法吗?

修改:

我意识到我的页面属于其他错误属于这种情况 然后我使用了GridView而不是DataList并使用了GridView的RowCommand事件并修复了它。

1 个答案:

答案 0 :(得分:1)

原因是您试图从CommandName而不是DataList获取LinkButton。如果您执行以下操作,您的代码将起作用:

protected void btnSample_Click(object sender, EventArgs e)
{
     // Instantiate:
     var command = ((LinkButton)sender).CommandName;

     // Do additional logic.
}

我相信你的意图是在Click事件上真正做点什么。如果情况不是这样,则需要FindControlDataList内的事件进行LinkButton,然后实例化CommandName以获取DataList。希望这能指出你正确的方向。

我会在Control内做一个示例,但没有确切的实现和其他信息,我将无法做到。它与上面类似,只是在当前控件中分配<table class="table table-bordered"> <thead> <tr> <th>Class</th> <th>A</th> <th>B</th> <th>Total</th> </tr> </thead> <tr> <td>1</td> <td>25</td> <td>27</td> <td>52</td> </tr> <tr> <td>2</td> <td>24</td> <td>26</td> <td>50</td> </tr> <tr> <td colspan="3">Total</td> <td>102</td> </tr> </table>