【问题标题】:How to pass Array as parameter to MVC controller如何将数组作为参数传递给 MVC 控制器
【发布时间】:2020-12-29 12:37:32
【问题描述】:

我想将一个数组和一个 Id 传递给控制器​​,但我尝试过的每个方法都给了我 null/0 值。

有人可以帮我看看我的代码中缺少什么吗?

这是我的 JS 代码:

addedParticulars = [{ FundRuleRid: fundRuleRid, FundRuleName: fundRuleName, Amount: amount }] //multiple values


function submitInvoice() {
    if (addedParticulars.length === 0)
        alert('Add any particular first')
    else {
        var jsonObject = JSON.stringify({ fundRules: addedParticulars, flatInvoiceRid: flat_invoice_Rid });
        console.log(jsonObject);
         $.ajax({
            type: "POST",
            url: "/FlatInvoice/ProcessInvoiceAmendment",
            contentType: "application/json; charset=utf-8",
            dataType: 'JSON', 
            data: jsonObject,
            traditional: true
        });
    }
}

这是我的行动方法

public JsonResult ProcessInvoiceAmendment(List<FundRuleModel> fundRules, Guid flatIinvoiceRid)
{
     return Json(new { status = _requestStatus, message = _responseMessage });
}

这是我的 .NET 类模型

 public class FundRuleModel : BaseModel
    {
        public bool IsActive { get; set; }
        public Guid FundRuleRid { get; set; }

        public string FundRuleName { get; set; }

        public int FundCycleRid { get; set; }
        public string FundCycleName { get; set; }

        public int FundRuleTypeRid { get; set; }
        public string FundRuleTypeName { get; set; }

        public int FundCalculationTypeRid { get; set; }
        public string FundCalculationTypeName { get; set; }

        public int FlatCalculationFilterRid { get; set; }
        public string FlatCalculationFilterName { get; set; }

        public decimal Amount { get; set; }

        public DateTime ApplicableDate { get; set; }
        public DateTime? EndDate { get; set; }

        public string Narration { get; set; }

        public bool IsIncludedInRegularInvoice { get; set; } = true;

        //Used in FlatInvoiceLogic
        public int Category { get; set; }
    }

我在控制台中获取了所有值,但没有任何东西传递给控制器​​。

【问题讨论】:

  • 客户端(浏览器)控制台有错误吗?检查服务器上的Output 窗口。你的ProcessInvoiceAmendment 是用HttpPostAttribute 装饰的吗?
  • 您应该创建具有“flatIinvoiceRid”属性和fundRules列表的模型,并且只向您的控制器发送一个参数
  • @Hopeless 客户端和服务器端都没有错误
  • @barzin.A 我们不能通过这种方法发送两个参数吗?另外我已经尝试过只发送一个参数(fundRules),但它没有得到控制器中的值。
  • @OkashaMomin 使用浏览器的Inspect 工具,打开Network 选项卡,然后再次运行您的javascript 以捕获请求信息。它应该报告响应详细信息。一定有什么问题。

标签: jquery ajax asp.net-core-mvc


【解决方案1】:

经过反复试验,我找到了解决方案。感谢@Sergey 和@Hopeless 的帮助。 没有 JSON,代码也能正常工作。

我刚刚更改了对象格式,它现在可以工作了; 请参阅以下更改:

 var jsonObject = {
            fundRules: addedParticulars ,
            flatIinvoiceRid: flat_invoice_Rid
        };
        console.log(jsonObject);
        $.ajax({
            type: "POST",
            url: "/FlatInvoice/ProcessInvoiceAmendment",
            data: jsonObject
        });

当我在 ajax 中添加 content-type :'application/json' 和 dataType:'JSON' 时,它会在控制器上获得空值(即使在对对象进行字符串化之后),但是当我尝试通过删除 JSON 操作时。它工作正常。

【讨论】:

    【解决方案2】:

    我使用 net core mvc 测试了这段代码,不知道它在其他版本上是如何工作的:

    addedParticulars = [{ FundRuleRid: fundRuleRid, 
    FundRuleName: fundRuleName, Amount: amount }];
    
    $.ajax({
                type: "POST",
                url: "/FlatInvoice/ProcessInvoiceAmendment/"+flat_invoice_Rid,
                contentType: "application/json; charset=utf-8", 
                dataType: 'json',
                data: JSON.Stringify(addedParticulars),
                success: function (result) {
                   ....
                },
                error: function (xhr, exception) {
                   .....
                }
               });
    

    并将您的操作更改为:

    [Route("~/FlatInvoice/ProcessInvoiceAmendment/{flatIinvoiceRid}")]````
    public JsonResult ProcessInvoiceAmendment([FromBody] IEnumerable<FundRuleModel> fundRules, string flatIinvoiceRid)
    {
    Guid  gflatIinvoiceRid= new Guid(flatIinvoiceRid);
    ......
         return Json(new { status = _requestStatus, message = _responseMessage });
    }
    

    【讨论】:

    • 他想发布一个列表/数组,这怎么处理?
    • @Sergey 我需要发布一个列表/数组而不仅仅是一个对象
    • 我又添加了一种方法来尝试。
    猜你喜欢
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多