为了账号安全,请及时绑定邮箱和手机立即绑定

C# 代码中的参数为 null,但它在 AJAX 调用中设置

C# 代码中的参数为 null,但它在 AJAX 调用中设置

C#
慕桂英546537 2021-10-09 16:11:52
我正在使用 C#、.NET Framework 4.7 和 jQuery 1.11.2 开发 ASP.NET MVC 5 应用程序。这个javascript代码:function RequestCodes(button, poId) {    var URL = '/ProductionOrder/RequestCodeForIncompleteOrder';    //button.attr("disabled", "disabled");    $('#ok').hide();    $('#fail').hide();    $('#cargando').show();    $.ajax({        url: URL,        type: "PUT",        dataType: "HTML",        data: { productionOrderId: poId },        contentType: "json",        success: function () {            $('#cargando').hide();            $('#ok').show();            $("#ok").fadeOut("slow", function () {                $('#ok').hide();            });        },        error: function (jqXHR, textStatus, errorThrown) {            console.log(textStatus, errorThrown);            $('#cargando').hide();            $('#fail').show();            $("#fail").fadeOut("slow", function () {                $('#fail').hide();                //button.removeAttr("disabled");            });        }    });}抛出这个错误:对于“TRZF.Web.API.Controllers.ProductionOrderController”中的方法“System.Web.Mvc.ActionResult RequestCodeForIncompleteOrder(Int32)”,参数字典包含不可为空类型“System.Int32”的参数“productionOrderId”的空条目。可选参数必须是引用类型、可为空类型或声明为可选参数。参数名称:参数。当我调用该方法时: public ActionResult RequestCodeForIncompleteOrder(int productionOrderId)问题在于 javascript 代码中的参数名称,但我不知道为什么,因为它与 C# 代码中的名称相同。我该如何解决这个错误?
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

首先,您通往 api 的路线是否正确?通常它以api/..为前缀


其次,您发送到服务器的客户端模型与服务器端的预期值类型 ( int)不匹配。


选项 1是将服务器端与客户端对象进行匹配。


您的客户端对象 { productionOrderId: poId }等于定义为此的服务器端模型


public class RequestModel

{

    public int productionOrderId { get; set; }

}

使用api控制器方法中的模型,从body中读取


public ActionResult RequestCodeForIncompleteOrder([FromBody]RequestModel model){}

注意:在使用内容类型 application/json 时,不要忘记在将对象发送到客户端之前对其进行字符串化, data: JSON.stringify({ productionOrderId: })


选项 2是在路由中发送 productionOrderId


[RoutePrefix("api/ProductionOrder")]

public class ProductionOrder : ApiController

{

    [HttpPut]

    [Route("RequestCodeForIncompleteOrder/{productionOrderId}")]

    public ActionResult RequestCodeForIncompleteOrder(int productionOrderId){}

}

然后使用 url 调用此方法,api/ProductionOrder/RequestCodeForIncompleteOrder/2345其中 2345 是您的订单 ID


查看完整回答
反对 回复 2021-10-09
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

在控制器RequestCodeForIncompleteOrder函数中,您需要获取具有可为空数据类型的 productionOrderId,如下所示:


RequestCodeForIncompleteOrder(int? productionOrderId)

{

//your code here

}

? 表示接受可为空的数据类型


查看完整回答
反对 回复 2021-10-09
  • 3 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信