You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Button的CommandArgument='<%# Eval("ID") %>'取值为空?

Button的CommandArgument绑定<%# Eval("ID") %>后后台取值为空的排查方案

问题重现

.aspx代码片段:

<td rowspan="2" class="btn" >
    <asp:HiddenField id="hdnID" value='<%# Eval("ID") %>' runat="server" />
    <asp:Button ID="BtnAnswer" runat="server" Text="Answer" EnableViewState="false" CssClass="answer-button" CommandName="OpenPage" 
  CommandArgument='<%# Eval("ID") %>' CausesValidation="false" />
</td>

后台.cs代码片段:

protected void listView_ItemCommad(object sender, ListViewCommandEventArgs e)
{
    if (e.CommandName == "OpenPage")
    {
        string id = (e.CommandArgument).ToString();
        
        Response.Redirect("GoIkenHenshuuGamen.aspx?id=" + id);
    }
}

已确认hdnID的值为2,但后台获取e.CommandArgument时为空。

可能原因及解决办法

  • 原因1:Button关闭ViewState且ListView未在回发时重新绑定
    给Button设置了EnableViewState="false"后,回发时ViewState不会保存CommandArgument的绑定值;如果ListView仅在首次加载(!IsPostBack分支)绑定数据,回发时ListView不会重新渲染,导致CommandArgument无法被重新赋值。
    解决办法:
    要么在每次页面加载时(包括回发)都执行ListView的数据绑定:

    protected void Page_Load(object sender, EventArgs e)
    {
        BindListView(); // 无论是否回发都执行绑定逻辑
    }
    

    要么删除Button的EnableViewState="false"属性,让ViewState自动保存CommandArgument的值,回发时无需重新绑定即可获取。

  • 原因2:ListView事件方法名拼写错误
    后台方法名是listView_ItemCommad,正确的事件方法名应为ItemCommand(少了字母n)。如果前台ListView的OnItemCommand属性绑定的是正确名称,这个拼写错误的方法可能无法被正确触发,建议修正方法名。

  • 替代方案:通过HiddenField直接获取ID
    既然已有能正确取值的HiddenField,可以在ItemCommand事件中直接查找当前Item内的HiddenField来获取ID,绕开CommandArgument的问题:

    protected void listView_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        if (e.CommandName == "OpenPage")
        {
            HiddenField hdnID = (HiddenField)e.Item.FindControl("hdnID");
            string id = hdnID.Value;
            Response.Redirect("GoIkenHenshuuGamen.aspx?id=" + id);
        }
    }
    

内容的提问来源于stack exchange,提问作者Not_Wibu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:32:48