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

如何检测ASP.NET的GridView控件是否被篡改或存在无效值

ASP.NET 原生 GridView 控件不存在内置的 GridCustom.IsValid() 方法直接检测控件值篡改或无效值:默认状态下框架只会对提交的控件值做基础类型转换,对于复选框这类控件,默认合法值只有 on(选中状态)和空值(未选中状态),收到异常值也不会主动触发校验报错。

你可以通过以下几种方案实现检测需求:

方案1:在数据提交事件中逐行校验提交值

可以在 GridView 的 RowUpdating 事件、或者自定义保存按钮的点击事件中,直接读取原始请求参数校验值是否合法,避免框架自动转换漏判:

// 遍历GridView所有行校验
foreach (GridViewRow row in GridCustom.Rows)
{
    // 读取对应行复选框的原始提交值
    string rawSubmitValue = Request.Form[$"GridCustom$ctl{row.RowIndex + 1:D2}$CHK_SelRcd"];
    // 仅空值和on为合法值
    if (!string.IsNullOrEmpty(rawSubmitValue) && rawSubmitValue != "on")
    {
        // 检测到篡改,标记页面校验不通过,中断操作
        Page.IsValid = false;
        break;
    }
}

方案2:开启页面事件验证(推荐)

ASP.NET 原生自带事件验证机制,开启后会自动校验回发的控件值是否属于服务端渲染时的合法范围,篡改后会直接抛出异常拦截请求:
只需检查页面头部 @Page 指令中是否配置了 EnableEventValidation="true"(该配置默认开启,很多开发者会为了方便手动关闭,重新开启即可生效)。

方案3:自定义扩展方法实现你需要的 IsValid() 调用

可以给 GridView 编写扩展方法,封装通用的校验逻辑:

public static class GridViewExtensions
{
    public static bool IsValid(this GridView grid, string checkBoxId = "CHK_SelRcd")
    {
        foreach (GridViewRow row in grid.Rows)
        {
            string rawValue = Request.Form[$"{grid.UniqueID}$ctl{row.RowIndex + 1:D2}${checkBoxId}"];
            if (!string.IsNullOrEmpty(rawValue) && rawValue != "on")
            {
                return false;
            }
        }
        return true;
    }
}

封装完成后就可以直接调用 if (!GridCustom.IsValid()) { /* 处理非法请求逻辑 */ },完全符合你期望的用法。

注意:所有校验逻辑必须放在服务端实现,客户端校验可被扫描器直接绕过,无法起到防护作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:09:02