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

我正在使用 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# 代码中的名称相同。


我该如何解决这个错误?


慕桂英546537
浏览 274回答 3
3回答

HUX布斯

首先,您通往 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

慕田峪9158850

在控制器RequestCodeForIncompleteOrder函数中,您需要获取具有可为空数据类型的 productionOrderId,如下所示:RequestCodeForIncompleteOrder(int? productionOrderId){//your code here}? 表示接受可为空的数据类型
打开App,查看更多内容
随时随地看视频慕课网APP