繁体   English   中英

Ajax将复杂对象发布到MVC控制器

[英]Ajax Posting complex object to MVC controller

我想将一个复杂的对象发布到MVC控制器。

我的代码发布到控制器

         var url = "/admin/addevent"
         $.ajax({
            type: "POST",
            contentType: 'application/json',
            dataType: "json",
            url: url,
            data: MyNewEvent,
            success: success
        });

        function success() {
            alert("Success");
        }

以下对象将被发布并在控制器上被识别并解析为该对象:

var MyNewEvent = JSON.stringify({
        ID: 0,
        Name: 'asdasd',
        Description: 'Description',
        DateTime: new Date().toISOString(),
        Owner: 1, Duration: 30,
        ReoccuringType: 0
    });

以下对象不

    var url = "/admin/addevent"
    var MyNewEvent = JSON.stringify({
        ID: 0,
        Name: 'asdasd',
        Description: 'Description',
        DateTime: new Date().toISOString(),
        Owner: 1, Duration: 30,
        ReoccuringType: 0,
        MembershipType: {
            ID: 1,
            Name: 'Test'
        }
    });

C#控制器

[HttpPost]
public JsonResult AddEvent(Event MyNewEvent)
{
    return Json(new { Success = true, Description = "Added" });
}

以下是应解析为的Event对象

public class Event
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public DateTime DateTime { get; set; }
    public User Owner { get; set; }
    public User Instructor { get; set; }
    public int MaxAttendance { get; set; }
    public int Duration { get; set; }
    public int ReoccuringType { get; set; }
    public MembershipType MembershipType { get; set; }
    public Organisation Organisation { get; set; }
}

public class MembershipType
{
    public int ID { get; set; }
    public string Name { get; set; }
    public MembershipType(BO.MembershipType MembershipType)
    {
        this.ID = MembershipType.ID;
        this.Name = MembershipType.Name;
    }

}

似乎控制器无法识别MemberShip对象。

谢谢

确定已经解决了这个问题,并且对于任何试图从我上面提供的细节中解决问题的人来说,您将无法做到。 (我现在已经更新了)。 简而言之,MembershipType对象需要一个无参数的构造函数,在该构造函数中,只有一个带有参数的构造函数

public class MembershipType
{
    public int ID { get; set; }
    public string Name { get; set; }
    public MembershipType(BO.MembershipType MembershipType)
    {
        this.ID = MembershipType.ID;
        this.Name = MembershipType.Name;
    }

}

当我用提琴手检查错误时,错误是来自服务器端的,“没有为此对象定义无参数构造函数。”一旦我输入了较少参数的构造函数,它就解决了我的问题。

public class MembershipType
{
    public int ID { get; set; }
    public string Name { get; set; }
    public MembershipType(BO.MembershipType MembershipType)
    {
        this.ID = MembershipType.ID;
        this.Name = MembershipType.Name;
    }

    public MembershipType()
    {
    }
}

请尝试以下。 删除JSON.stringify函数。

var MyNewEvent = {
        ID: 0,
        Name: 'asdasd',
        Description: 'Description',
        DateTime: new Date().toISOString(),
        Owner: 1, Duration: 30,
        ReoccuringType: 0,
        MembershipType: {
            ID: 1,
            Name: 'Test'
        }
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM