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

如何通过AJAX请求触发ASP.NET MVC4 Controller方法及解决反序列化报错

问题描述

调用AJAX请求触发Controller方法时收到报错:无法将消息反序列化为MessageContract类型FXM.Ordering.WS.Contract.BoCreateAffiliateRequest,因为该类型没有默认(无参数)构造函数。

相关代码

按钮代码

<div class="form-group">
    <div>
        <input type="button" value="Create" class="btn btn-default" id="create-affiliate-button" />
    </div>
</div>

AJAX请求代码

$(function () {
    refreshGroups();
    $('#create-affiliate-button').click(function (e) {
        console.log("blahblahblah");

        var b = $("form").serialize();
        console.log("formvalues", b);

        $.ajax({
            url: "/en/AjaxUI/CreateAffiliate",
            type: "GET",
            dataType: "json",
            data: b,
       
            //error: function (jqXHR, exception) {
            //    failMessage();
            //}
        });
    });
});

function refreshGroups() {
    var pltf = "MT4_LIVE";
    var out = $('#MT4Group');
    if (pltf != null && pltf !== "") {
        $.ajax({
            url: '/' + window.currentLangCulture + '/BOLiveForms/GetPlatformGroupByFilter',
            data: {
                platform: pltf, currency: "", withId : true
            },
            type: 'GET',
            beforeSend: function () {
                $('#tpLoader').show();
            },
            complete: function () {
                $('#tpLoader').hide();
            },
            success: function (data) {
                populateDropDown(out, data);
            }
        });
    } else {
        out.empty();
        out.append($('<option></option>').val('').html(window.defaultSelection));
    }
}

Controller接口代码

public JsonResult CreateAffiliate(NewAffiliateViewModel newAffiliateViewModel)
{
    try
    {
        var res = BackOfficeServices.BoAddAffiliateUser(newAffiliateViewModel);
        return Json("success");
    }
    catch (Exception e)
    {
        throw e;
    }
}

已修改的NewAffiliateViewModel代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FXM.BO.ViewModels
{
    public class NewAffiliateViewModel
    {
        public NewAffiliateViewModel()
        {
        }

        public int Id { get; set; }

        public string AffiliateName { get; set; }

        public string Email { get; set; }

        public int Employee { get; set; }

        public int MT4Group { get; set; }
    }
}
解决方案
  1. 你已经正确给NewAffiliateViewModel添加了无参构造函数,当前报错指向的是FXM.Ordering.WS.Contract.BoCreateAffiliateRequest类型,这是BoAddAffiliateUser方法关联的WCF服务契约类,找到这个类的定义,和ViewModel一样给它添加一个公共的无参数构造函数即可解决反序列化报错。
  2. 额外优化建议:
  • 提交表单的AJAX请求建议将type改为POST,同时给CreateAffiliate方法添加[HttpPost]注解,避免GET请求的URL长度限制,也更符合接口规范。
  • POST请求时可以在AJAX配置中添加contentType: 'application/x-www-form-urlencoded; charset=UTF-8',确保表单序列化数据能被后端正确解析。

内容的提问来源于stack exchange,提问作者Tom Sawyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 04:36:06