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

.NET模型列表的Remote Validation远程验证失效问题

问题解决:ASP.NET Remote验证在模型列表动态表格中失效

问题场景

为ItemQuantity字段配置了Remote远程验证,要求输入数量小于数据库可用库存,单个文本框场景下验证正常触发,但绑定模型列表的动态表格场景中验证无法生效。

问题原因

当模型以列表形式绑定表单时,ASP.NET生成的字段名称为StrRequestDetails[i].ItemQuantity和StrRequestDetails[i].ItemCode,但默认Remote属性生成的验证规则中,AdditionalFields参数仅传递ItemCode,而非带索引的StrRequestDetails[i].ItemCode,导致后台验证方法无法获取对应行的ItemCode值,验证逻辑失效。

解决方案

在视图的for循环中,手动为每个ItemQuantity输入框设置正确的data-val-remote-additionalfields属性,指定带索引的ItemCode字段名:

修改后的视图代码

@for(int i =0; i< Model.StrRequestDetails.Count; i++)  
{     
    <tr>                             
        <td>
            <select class="form-control" asp-for="@Model.StrRequestDetails[i].CategoryCode" asp-items="@ViewBag.ListofCategory" onchange='Change(this)'>                                
                <option value="">---Select Category---</option>                              
            </select>                                  
            <span asp-validation-for="@Model.StrRequestDetails[i].CategoryCode" class="text-danger"> </span>
        </td> 
        <td>
            <select class="form-control" asp-for="@Model.StrRequestDetails[i].ItemCode" id="ItemCodes"></select>                                  
            <span asp-validation-for="@Model.StrRequestDetails[i].ItemCode" class="text-danger"></span>
        </td>                                  
        <td>                                      
            <input class="form-control" 
                   asp-for="@Model.StrRequestDetails[i].ItemQuantity" 
                   data-val-remote-additionalfields="*.StrRequestDetails[@i].ItemCode" />                                
            <span asp-validation-for="@Model.StrRequestDetails[i].ItemQuantity" class="text-danger"></span>
        </td>                                                       
        <td>
            <button type="button" class="btn btn-primary" id="btnremove-@i" onclick="DeleteItem(this);">Delete</button>
        </td>                          
    </tr>                     
}

补充说明

  • data-val-remote-additionalfields的值格式为*.字段全名,其中StrRequestDetails[@i].ItemCode是对应行的ItemCode字段名称,循环中的@i会被自动替换为当前索引值。
  • 确保后台验证方法的参数名称与字段名保持一致,当前代码中的ItemQuantity和ItemCode参数是正确匹配的。

可选优化:后台空值处理

为避免未找到商品时出现空引用异常,建议在验证方法中增加空值判断:

[AcceptVerbs("get", "post")]    
[AllowAnonymous]        
public JsonResult VerifyQuntity(int ItemQuantity, int ItemCode) 
{  
    var qutity = _context.StrItemCodes.FirstOrDefault(e => e.ItemCode == ItemCode);    
    // 未找到对应商品时直接返回验证失败
    if(qutity == null)
    {
        return Json("商品未在库存中找到");
    }
    bool result = ItemQuantity <= qutity.TotalQuaAva;
    return Json(result);
}

内容的提问来源于stack exchange,提问作者AL- MAHROUQI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:38:17