【问题标题】:jQuery Array is not posting to ASP.NET MVC controllerjQuery Array 未发布到 ASP.NET MVC 控制器
【发布时间】:2021-08-08 01:02:01
【问题描述】:

我很难将我的视图中的数组列表发布到控制器。其他所有价值都在通过。

有人能发现我的代码有什么问题吗?

控制器:

public ActionResult SaveProgress(BBCRMSurveyVM model)
{
    try
    {
        return Json(new { success = true });
    }
    catch (Exception e)
    {
        return Json(new { success = false, msg = e.Message });
    }
}

主视图模型:

public string ImplementationProcessFeelWasSuccessful { get; set; }
public string ImplementationProcessAdviceOtherFederations { get; set; }
public List<AdditionalTechnologyVM> AdditionalTech = new List<AdditionalTechnologyVM>();

其他技术虚拟机:

public class AdditionalTechnologyVM
{
    public string PlatformName { get; set; }
    public string BusinessPurpose { get; set; }
    public bool? FullyIntergrated { get; set; }
    public bool? PartiallyIntergrated { get; set; }
}

JS 文件:

function onAddButtonClickEvent() {
    additionaltechs.push({
       'PlatformName': platformNameAT,
       'BusinessPurpose': businessPurposeAT,
       'FullyIntergrated': intergrated == "Fully" ? true : false,
       'PartiallyIntergrated': intergrated == "Partially" ? true : false
    });
}

function SaveProgress() {
    var formData = $('#wizard').serializeArray();

    //if (additionaltechs.length > 0) {
    //    for (var x = 0; x < additionaltechs.length; x++) {
    //        formData[formData.length] = { name: "AdditionalTech", value: JSON.stringify(additionaltechs[x]) };
    //    }
    //}

    formData[formData.length] = { name: "AdditionalTech", value: additionaltechs };

    $.each(formData, function (index, field) {
        if (field.name.search('Budget') > 0) {
            field.value = field.value.replace('$', '').replace(/,/g, '');
        }
    });

    formData = JSON.stringify(formData);

    console.log(formData);
    
    $.ajax({
        url: '/save-progress',
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        data: formData,
        dataType: 'json',
        success: function () {},
        error: function () {}
    });
}

控制台中的输出:

列表计数始终为 0?

【问题讨论】:

  • 请同时发布您的控制器代码。它将帮助我们识别接收方法签名
  • 很抱歉。刚刚做了

标签: c# jquery asp.net-mvc


【解决方案1】:

我认为你把它弄得比你需要的更复杂。 :)

最终,您的控制器方法似乎采用单个模型,而不是数组。因此,我怀疑您发送的 JSON 看起来像这样:

{
 "ImplementationProcessFeelWasSuccessful" : "",
 "ImplementationProcessAdviceOtherFederations" : "",
 "AdditionalTech" : [...]
}

如果它应该是单个项目被发送,那么我希望你的代码是这样的:

function SaveProgress() {

    var formData =
    {
     ImplementationProcessFeelWasSuccessful : $('#wizard #val1').val(),
     ImplementationProcessAdviceOtherFederations : $('#wizard #val2').val(),
     AdditionalTech :  additionaltechs 
         };

    formData = JSON.stringify(formData);

    console.log(formData);
    
    $.ajax({
        url: '/save-progress',
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        data: formData,
        dataType: 'json',
        success: function () {},
        error: function () {}
    });
}

但是,您正在发送一组项目,这在这里没有意义。

【讨论】:

    【解决方案2】:

    最终将列表作为 JSON 字符串发送并以字符串形式接收。在控制器中,我使用 JsonConvert.DeserializeObject 方法,如下所示:

    var additionalTechs = JsonConvert.DeserializeObject<List<AdditionalTechnologyVM>> 
    (model.AdditionalTech);
    

    【讨论】:

    • 这绝对是你不应该这样做的方式。
    • 这不是优雅的,也不是一个好的做法。您需要在控制器中接收 List 。 MVC 对象绑定非常智能,如果您通过 ajax 发送正确的对象,它会完美映射。
    • 我明白,但它不起作用。不确定问题是什么,但它不会将列表传递给模型。这种解决方法非常有效。它不是一个优雅的解决方案这一事实并没有使它成为一个糟糕的方法。完成任务!
    猜你喜欢
    • 2013-12-15
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多