Javascript 控制器不接受传递的Json

Javascript 控制器不接受传递的Json,javascript,c#,json,Javascript,C#,Json,我通过在视图中创建JSON得到这个结果 header:{"ScheduledVisit":"08/02/2017 12:00 AM","Company":"fdsa","ContactPerson":"asfd","Phone":"asdf","Purpose":"fasd","Detail":"asdf"} 我的模型如下所示: public class ScheduleVisit { [Required(ErrorMessage = "* Required")] public

我通过在视图中创建JSON得到这个结果

header:{"ScheduledVisit":"08/02/2017 12:00 AM","Company":"fdsa","ContactPerson":"asfd","Phone":"asdf","Purpose":"fasd","Detail":"asdf"}
我的模型如下所示:

public class ScheduleVisit
{
    [Required(ErrorMessage = "* Required")]
    public DateTime ScheduledVisit { get; set; }
    public string Company { get; set; }
    public string ContactPerson { get; set; }
    public string Phone { get; set; }
    public string Purpose { get; set; }
    public string Detail { get; set; }
}
我这样传递我的数据:

document.getElementById("btn_submit_schedule").addEventListener("click", function (event) {
        event.preventDefault();
        if ($("#scheduledVisit").val().length === 0) {
            $("#scheduledVisit").focus();
        }

        var obj = {};
        obj.ScheduledVisit = document.getElementById("scheduledVisit").value;
        obj.Company = document.getElementById("company").value;
        obj.ContactPerson = document.getElementById("contactPerson").value;
        obj.Phone = document.getElementById("phone").value;
        obj.Purpose = document.getElementById("purpose").value;
        obj.Detail = document.getElementById("detail").value;
        console.log(obj);
        addSchedule(obj);
    });

    function addSchedule(data) {
        $.ajax({
            type: "POST",
            url: "@Url.Action("ScheduleVisit", "ScheduleVisit")",
            data: {header: JSON.stringify(data)},
        success: function(result) {
            alert(result);
        },
        error: function(error) {
            alert(error);
        }
    });
}

and my controller looks like this:

    [HttpPost]
    public JsonResult ScheduleVisit(ScheduleVisit header)
    {

        return Json(false);
    }
在调试模式下运行并检查控制器是否接受任何内容时,“header”参数为null。请告诉我哪里弄错了。

问题在于“data:{header:JSON.stringify(data)}”与您在控制器上期望的对象不同

这应该行得通

        $.ajax({
           type: "POST",
           url: "@Url.Action("ScheduleVisit", "ScheduleVisit")",
           data: data,
           ...
控制器需要以下对象:

{
    "ScheduledVisit":"08/02/2017 12:00 AM",
    "Company":"fdsa",
    "ContactPerson":"asfd",
    "Phone":"asdf",
    "Purpose":"fasd",
    "Detail":"asdf"
}

刚刚用当前解决方案将
data:{header:JSON.stringify(data)}
替换为
data:data

这是一种非常复杂的手动方式,您可以使用以下简单方式

将名称字段分配给每个元素,使其与现在的id相同

<input type="text" name="Company" value="" />

希望这会有所帮助。

@Vanna我认为它的C#和ASP.NETC#和javascript。Json(false)只是输出一些东西。为什么您的类名和操作名是“ScheduleVisit”?这样我更容易记住。我明白了。。。我一到电脑前就会这么做。我希望你的解决方案能奏效!不过,这里还有一个问题,如果我删除标题,我将如何传递两个参数。实际上,我必须传递两个参数。在代码中,我只是说一个。据我所知,您不能向HttpPost发送多个对象。您可以创建一个包含要发送和使用的两个对象的对象。非常感谢。毫无疑问,这是一个更好的方法。
data: $("form").serializeArray(),