【问题标题】:.Net Core 3.0 AJAX POST Body Always Null.Net Core 3.0 AJAX POST 正文始终为空
【发布时间】:2020-02-07 21:43:09
【问题描述】:

我最近将我的项目从 .Net Framework 4.7 转换为 .Net Core 3.0。我无法让我的 AJAX 帖子正常工作。

以下是 .Net Framework 4.7 的工作原理:

查看:

@using (Ajax.BeginForm("Save", "Controller", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "OnSaveSuccess", OnFailure = "OnFailure" }, new { Model }))
{
  ... Model Code Here
}

控制器:

[HttpPost]
public JsonResult Save(Contract contract)

以下是 .Net Core 3.0 中不起作用的部分:

查看:

<form method="post" action="/Controller/Save" data-ajax="true" data-ajax-method="post" data-ajax-sucess="OnSaveSuccess"  data-ajax-failure="OnFailure">

控制器:

[HttpPost]
public JsonResult Save([FromBody] Contract contract)

Contract 对象在此请求中为 NULL。是不是我做错了什么?

谢谢

【问题讨论】:

    标签: .net-core asp.net-core-mvc unobtrusive-ajax


    【解决方案1】:

    您可以参考下面的例子使用jQuery Unobtrusive AJAX进行ajax提交。

    <form method="post" action="/Home/Save" data-ajax="true" data-ajax-method="post" data-ajax-success="OnSaveSuccess" data-ajax-failure="OnFailure">
        <div class="form-group row">
            <label asp-for="Name" class="col-sm-3 col-form-label"></label>
            <div class="col-sm-7">
                <input asp-for="Name" class="form-control">
            </div>
        </div>
        <div class="form-group row">
            <label asp-for="Email" class="col-sm-3 col-form-label"></label>
            <div class="col-sm-7">
                <input asp-for="Email" class="form-control">
            </div>
        </div>
        <div class="form-group row">
            <div class="col-sm-7 offset-sm-3">
                <button class="btn btn-primary" id="submit">Submit</button>
            </div>
        </div>
    </form>
    

    获取并引用 jquery-ajax-unobtrusive

    @section scripts{
        <script src="~/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.js"></script>
        <script>
            function OnSaveSuccess(res) {
                console.log(res);
                alert('Success');
            }
    
            function OnFailure() {
                 alert('failed');
            }
        </script>
    }
    

    合约类

    public class Contract
    {
        public string Name { get; set; }
        public string Email { get; set; }
    }
    

    控制器动作(带有 [FromForm] 属性)

    [HttpPost]
    public JsonResult Save([FromForm] Contract contract)
    {
        // code logic here
    }
    

    测试结果

    【讨论】:

      【解决方案2】:

      这最终是我的错。我说:

      $.ajaxSetup({
         contentType: "application/json"
      });
      

      这导致 POST 无法正确映射。一旦我删除它,模型就会正确地过来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 2015-09-08
        相关资源
        最近更新 更多