【问题标题】:null keeps being passed from view to controllernull 不断从视图传递到控制器
【发布时间】:2016-09-21 21:47:28
【问题描述】:

我已经尝试了所有可以在 stackoverlfow 上找到的解决方案,并按照此处的说明重新开始 https://stick2basic.wordpress.com/2013/04/14/how-to-pass-model-from-view-to-controller-using-jquery/

每次我触发我的 ajax 调用时,它都会将 null 传递给控制器​​

*修正拼写错误,问题依旧

型号

public class DateModel
    {
        public DateTime date { get; set; }
    }

JavaScript

$(document).ready(function () {
    $("#jqxdatetimeinput").jqxDateTimeInput({ width: '250px', height: '25px' });
    $("#jqxbutton").jqxButton({ width: '150', height: '25' });

    $("#jqxbutton").on('click', function () {

        var dateSelected = $('#jqxdatetimeinput').jqxDateTimeInput('getDate');
        alert(dateSelected);

        var DateModel =
            {
                "date": dateSelected
            };

        $.ajax({
            url: 'home/submitDate/',
            data: JSON.stringify(DateModel),
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                alert(data);
            }
        });
    });
});

控制器

public class HomeController : Controller
    {
        public IActionResult Index()
        {
            DateModel selectionDate = new DateModel();
            return View();
        }

        public JsonResult submitDate(DateModel selectionDate)
        {
            return Json(selectionDate.date);
        }
    }

【问题讨论】:

  • 不,我正在尝试传递复合而不是参数,我正在尝试与您建议的帖子相反。我需要直接接收模型而不是参数,这是我的问题的一个简化示例,我的模型在生产中要大得多。

标签: c# asp.net-mvc


【解决方案1】:

是不是你的 contentType 参数的错字?

contentType: 'aplication/json; charset=utf-8',

应该是

contentType: 'application/json; charset=utf-8',

【讨论】:

  • 感谢您的建议,拼写错误并没有解决问题,我仍然收到 null。
【解决方案2】:

您不需要使用JSON.stringify。由于它是一个简单的对象,您可以按原样传递它。模型绑定将起作用。

$.ajax({
            url: 'home/submitDate/',
            data: DateModel,
            type: 'POST',                
            success: function (data) {
                alert(data);
            }
        });

或者如果你想发送你的 js 对象的 Json 精简版本,你需要通过指定 contentType 属性值来告诉服务器你发送的是什么类型的数据。你错了!更正您在contentType 中的错字!价值

$.ajax({
    url: '@Url.Action("submitDate")',
    data: JSON.stringify(DateModel),
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert(data);
    }
});

【讨论】:

  • 感谢您的建议,但均未能解决问题。修复我的拼写错误以及切换到您建议的代码仍然发送​​ NULL
【解决方案3】:

问题在于日期格式。我能够使用 IE 调试并看到 JQ Widgets 以 DateTime 无法处理的意外方式传递日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多