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

ASP.NET C#中点击按钮无法获取GridView内TextBox的值

GridView中TextBox获取值为null的原因及解决办法

以下是导致txtRemarks.Text返回null的常见原因及对应解决方案:

  • 页面回发时未判断IsPostBack就重新绑定GridView
    这是最核心的原因。如果在Page_Load事件中,没有通过!IsPostBack判断就执行GridView的数据绑定操作,每次回发(比如点击按钮、CheckBox自动回发)时,GridView都会重新从数据源加载原始数据,直接覆盖用户在TextBox中输入的内容,最终获取到的是REJECT_REMARKS字段的初始值(若该字段为null则返回空)。
    解决办法:仅在首次加载页面时绑定数据:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // 执行GridView数据绑定的代码
            BindHotoIPData();
        }
    }
    
  • CheckBox的AutoPostBack导致输入内容丢失
    你的CheckBox设置了AutoPostBack="true",每次点击都会触发页面回发。如果回发时未正确判断IsPostBack就重新绑定GridView,用户之前输入的备注会被清空,后续点击btnRejectSite时,TextBox的值已经被重置为初始状态。
    解决办法:如果不需要实时响应CheckBox的选中状态,直接去掉AutoPostBack="true";若必须保留自动回发,确保回发逻辑中不重新绑定GridView。

  • 未针对选中行处理逻辑
    你的代码循环所有GridView行时,每次都会覆盖strRemarks的值,最终仅保留最后一行的内容。如果需要获取选中行的备注,必须在循环中判断CheckBox是否选中:

    foreach (GridViewRow row in rptHotoIPDataInfo.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkRow = row.FindControl("chkRow") as CheckBox;
            if (chkRow != null && chkRow.Checked)
            {
                strID = (row.FindControl("lbl_ID") as Label).Text;
                TextBox txtRemarks = row.FindControl("txtRemarks") as TextBox;
                if (txtRemarks != null)
                {
                    strRemarks = txtRemarks.Text;
                    // 在这里处理当前选中行的业务逻辑
                }
            }
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:35:16