控制器不接受通过Json

时间:2017-08-11 04:48:44

标签: 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 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);
    }

当我在调试模式下运行并检查我的控制器是否接受任何内容时,我在"标题"上得到null。参数。请告诉我我哪里弄错了。

2 个答案:

答案 0 :(得分:1)

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

这种非常复杂且手动的方式您可以使用以下简单方法

为每个元素指定名称字段,就像id now

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

使用serializeArray

data: $("form").serializeArray(),

希望这会有所帮助。

答案 1 :(得分:0)

问题是“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"
}