【问题标题】:bad request for jquery Ajax to post stringified json data to MVC actionjquery Ajax 将字符串化的 json 数据发布到 MVC 操作的错误请求
【发布时间】:2016-11-18 17:00:35
【问题描述】:

我打算使用来自 jquery 的 ajax 调用将数据发布到 MVC 控制器。 我想使用 JSON.stringify() 将 json 对象的字符串传递给控制器​​,但我不断收到 400 错误请求。 这是发送字符串 json 对象的坏习惯吗?还是我必须使用视图模型?

我在 MVC 中的操作如下,接受字符串值作为参数。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(string values)
    {

        .. do some actions here ...

        return View("Customer");
    }

我的 Ajax 调用如下所示。

$("#customer-add-btn").click(function () {

            var data = $('#customer-add-form').serializeArray();
            console.log(data);

            var values = JSON.stringify(data);

            console.log(values);


            $.ajax({
                url: 'Customer/Create',
                data: values,
                type: "POST",
                dataType: "json",
                data: values,
                success: function (result) {
                    console.log('success');// do something on success
                },
                error: function () {
                    console.log('error');// do something on error
                }
            });
        });

这是字符串化表单值的示例。

[ {"name":"business_name","value":"adsf"},{"name":"business_phone_number","value":"124"},{"name":"business_contact_number","value":""} ]

【问题讨论】:

  • 尝试从ActionMethod 中删除ValidateAntiForgeryToken,而param 不是string,它通过ajax 传递。尝试将其作为键值对接收或将其定义为键值对类..

标签: jquery asp.net-mvc asp.net-ajax


【解决方案1】:

你可以用这个:

$.ajax({
                type: "POST",
                url: '@Html.Raw(Url.Action("Create", "Customer"))',
                data: { values: JSON.stringify(values) },
                dataType: "json",
                success: function (result) {
                    console.log('success');// do something on success
                },
                error: function () {
                    console.log('error');// do something on error
                }
            });

并在控制器中将其序列化以将其与模型绑定:

var model = new List<ValuesModel>();
                //JavaScript Serializer to bind with Model
                JavaScriptSerializer jsSerializer = new JavaScriptSerializer(new SimpleTypeResolver());
                model = jsSerializer.Deserialize<List<ValuesModel>>(values);

ValuesModel 在哪里

public class ValuesModel
    {
        public ValuesModel()
        {
        }
        public string name { get; set; }
        public string values { get; set; }
    }

【讨论】:

  • 谢谢.. 这真是个好主意。你能帮我定义什么动作方法吗?我尝试使用上面的代码,但仍然收到错误的请求。
  • 你需要使用public async Task&lt;ActionResult&gt; Create(string values)并删除ValidateAntiForgeryToken
  • 你也可以使用[HttpPost] public async Task&lt;ActionResult&gt; Create(List&lt;ValuesModel&gt; values) { //do something *** return View("Customer"); }
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2012-09-18
  • 2013-01-23
相关资源
最近更新 更多