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

ASP.NET中CallServer POST请求时numeroOrdem传值为null问题求助

问题描述

我需要将变量numeroOrdem传入服务器以执行工单删除操作,但调用CallServer时浏览器提示该变量为null,无法继续执行。第一个console.log语句能正常输出所需数据,但CallServer调用时却无法正确传递该值。

JS代码

function ApagarOrdem() {
    var r = confirm("Deseja Apagar Ordem de Serviço?");
    if (r == true) {
        let numeroOrdem = $("#idOSrr").val();
        console.log("OS: ", numeroOrdem);
        $("#carregaOrdem").css("display", "block");
        CallServer("POST", "/AjaxOrdemDeServico/ApagarOrdemAndPoligonos", { numeroOs: numeroOrdem },
            function (r) {
                console.log("dentro da function")
                if (r.Msg == "OK") {
                    console.log("dentro do if")
                    $('#CriarOS').modal('hide');

                    for (var i = 0; i < OS.length; i++) {
                        if (OS[i].NumOS == r.NumeroOs) {
                            OS[i].Remove();
                            $("#carregaOrdem").css("display", "none");
                            // OS[i].SetColorPoligono(r.OS_Return.Situacao);
                            //  OS[i].SetInfoWindowPoligono(r.OS_Return.NumeroOrdemServico, r.OS_Return.Situacao, r.OS_Return.Colaborador);
                        }
                    }
                }
            });
    } else {

    }
}

C#后端代码

[HttpPost]
[AppAuthorize(Modulos = new Modules[] { Modules.ORDEM_DE_SERVICO }, Permissoes = new Permissions[] { Permissions.REMOVER })]
public ActionResult ApagarOrdemAndPoligonos(string numeroOs)
{
    OrdemDeServico OrdemDeDB = UnitOfWork.OrdemDeServicoRepository.Get(or => or.NumeroOS == numeroOs).FirstOrDefault();
    if (OrdemDeDB != null)
    {
        var postesDb = UnitOfWork.PosteRepository.Get(idor => idor.IdOrdemDeServico == OrdemDeDB.IdOrdemDeServico).ToList();
        if (postesDb != null)
        {
            foreach (var item in postesDb)
            {
                item.IdOrdemDeServico = null;
            }
            UnitOfWork.Save();
        }

        // 后续逻辑省略...
    }
}

排查与解决方案

1. 检查CallServer函数的参数处理逻辑

问题大概率出在CallServer对POST参数的序列化方式上。如果该函数未正确处理JSON格式参数,后端会无法解析到numeroOs值:

  • 如果CallServer使用原生XMLHttpRequest或未配置JSON头的$.ajax,需手动序列化参数并设置请求头:
    // 修改CallServer的参数传递部分
    const requestData = JSON.stringify({ numeroOs: numeroOrdem });
    CallServer("POST", "/AjaxOrdemDeServico/ApagarOrdemAndPoligonos", requestData,
        function(r) {
            // 回调逻辑不变
        },
        // 若CallServer支持设置请求头,添加以下配置
        { "Content-Type": "application/json" }
    );
    
  • 后端对应修改参数接收方式,添加[FromBody]特性:
    public ActionResult ApagarOrdemAndPoligonos([FromBody] string numeroOs)
    
    或者定义DTO类接收参数(更推荐,避免字符串解析问题):
    public class DeleteOsRequest {
        public string numeroOs { get; set; }
    }
    
    public ActionResult ApagarOrdemAndPoligonos([FromBody] DeleteOsRequest request)
    {
        string numeroOs = request.numeroOs;
        // 后续逻辑不变
    }
    

2. 验证请求实际发送的参数

打开浏览器开发者工具的网络标签,找到发送到/AjaxOrdemDeServico/ApagarOrdemAndPoligonos的POST请求:

  • 查看请求体,确认numeroOs是否存在且值正确
  • 如果请求体无该参数,说明CallServer未正确传递变量,需检查该函数的实现代码

3. 确认变量作用域与稳定性

在CallServer调用前新增日志,验证变量值是否在发送前保持正确:

console.log("准备发送的OS编号:", numeroOrdem);
CallServer(/* ... */);

如果该日志能输出正确值,说明问题出在参数传递到服务器的过程中,而非变量本身。

4. 排除元素意外变更的影响

虽然已将值存入变量,但如果#idOSrr元素在请求发送前被移除/修改,理论上不会影响已存储的变量值,但可以通过以下代码确认变量类型与值:

let numeroOrdem = $("#idOSrr").val().trim(); // 去除首尾空格
console.log("OS类型:", typeof numeroOrdem, "值:", numeroOrdem);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:45:31