Jquery Ajax 无法将模型发布到控制器

Posted

技术标签:

【中文标题】Jquery Ajax 无法将模型发布到控制器【英文标题】:Jquery Ajax can't post model to controller 【发布时间】:2021-09-07 17:50:10 【问题描述】:

我可以将模型从视图中检索到我的脚本,但将其发布到控制器不起作用。 我从 ajax 得到的模型是空的。为什么 ?这是某种类型的问题吗?我不明白为什么,请帮忙。

我的脚本:

$('#addresssendbutton').on('click', function () 
    var valdata = $("#serializer").serialize();
    console.log(valdata); //This shows me all the data without missing
    $.ajax(
        type: 'POST',
        url: '/Home/SaveClientAddress',
        data:  'clientAddress': valdata ,
        success: function (response) 
            Swal.fire(
                position: 'top-end',
                icon: 'success',
                title: 'Adresiniz kaydedildi...',
                showConfirmButton: false,
                timer: 1500
            )
        ,
        error: function (response) 
            Swal.fire(
                icon: 'error',
                title: 'Hata...',
                text: response.errormessage,
            )
        
    );
);

我的控制器:

        public async Task<ActionResult> SaveClientAddress(ClientAddress clientAddress)
    
        Debug.WriteLine(clientAddress.clientaddress_cityname);
        if(!db.ClientAddress.Where(x=>x.client_id == clientAddress.client_id).Any())
        
            db.ClientAddress.Add(clientAddress);
            await db.SaveChangesAsync();

            return Json(new
            
                success= true,
                error=false
            );
        
        else
        
            return Json(new
            
                success=false,
                error=true,
                errormessage = "Sistemde zaten kayıtlı bir adresiniz var."
            );
        
        
        
    

编辑: 客户端地址模型:

[Table("clientaddress_tbl")]
public class ClientAddress

    [Key]
    public int clientaddress_id  get; set; 
    [ForeignKey("Client")]
    public int? client_id  get; set; 
    [Required]
    public string clientaddress_cityname  get; set; 
    [Required]
    public string clientaddress_districtname  get; set; 
    [Required]
    public string clientaddress_neighborhoodname  get; set; 
    [Required]
    public string clientaddress_streetname  get; set; 
    [Required]
    public string clientaddress_apartmentnumber  get; set; 
    [Required]
    public string clientaddress_buildingnumber  get; set; 
    [Required]
    public string clientaddress_addressdescription  get; set; 
    public virtual Client Client get; set; 

还有console.log(valdata):

clientaddress_cityname=istanbul&clientaddress_districtname=umraniye&clientaddress_neighborhoodname=site&clientaddress_streetname=evren&clientaddress_buildingnumber=54&clientaddress_apartmentnumber=9&clientaddress_addressdescription=xxxxxx&client_id=1

我从会话中获取了 client_id,并且模型中除了 clientaddress_id 之外没有任何空字段。

【问题讨论】:

如果您的 data clientAddress: valdata 与您的班级 ClientAddress 不匹配完全,则它将是 null。获取 any 帖子首先使用基本数据,例如 id,然后是一个简单的类(可能 ClientAddress 很简单),但只有一个 ID 和一个字符串属性 - 在具有嵌套类的复杂类之前 请包括您的 ClientAddress 模型和来自 console.log(valdata) 的响应; @freedomn-m 我正在使用 Code-First,除了模型中的 clientaddress_id 字段之外,我正在传递所有数据。应该没问题吧? @CarstenLøvboAndersen 好的,等一下。 @CarstenLøvboAndersen 我已经包括了这些。 【参考方案1】:

尝试修复您的 ajax 数据。假设您的表单 id 是“序列化程序”

var valdata = $("#serializer").serialize();
// or I usually use
var valdata = $("#serializer").serializeArray();

......

 data:  valdata ,
.........

【讨论】:

【参考方案2】:

我通过做这个改变想通了:

$('#addresssendbutton').on('click', function () 
var valdata = $("#serializer").serialize();
console.log(valdata); //This shows me all the data without missing
$.ajax(
    type: 'POST',
    url: '/Home/SaveClientAddress',
    data: valdata // Change data to this
    success: function (response) 
        Swal.fire(
            position: 'top-end',
            icon: 'success',
            title: 'Adresiniz kaydedildi...',
            showConfirmButton: false,
            timer: 1500
        )
    ,
    error: function (response) 
        Swal.fire(
            icon: 'error',
            title: 'Hata...',
            text: response.errormessage,
        )
    
);

);

在我的控制器中:

  public async Task<ActionResult> SaveClientAddress(ClientAddress data)

【讨论】:

以上是关于Jquery Ajax 无法将模型发布到控制器的主要内容,如果未能解决你的问题,请参考以下文章

将模型从 jquery ajax 传递给控制器

如何在 jQuery $.ajax() 发布请求中向 MVC 控制器方法发送模型

将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器

如何使用 jquery ajax 将 web api 控制器中的 web 表单值作为模型类传递

使用目标 AJAX 和 ASP 将复杂模型传递给控制器

使用 jquery 和 ajax 将 json 对象发布到 mvc 控制器