如何解决空json字符串传递给mvc控制器

本文关键字:字符串 控制器 mvc json 何解决 解决 | 更新日期: 2023-09-27 18:08:33

我使用模型对象列表创建了一个表。然后在单击该行上的按钮时将该行数据传递给Ajax post。

在Ajax Post中,对传递的行数据调用.stringify。当我检查在Dev Tools中传递的数据值时,我可以看到它们被填充:

["66", "jdoe@gmail.com", "2009", "test",…]
0
:
"66"
1
:
"jdoe@gmail.com"
2
:
"2009"
3
:
"test"

但是当我进入从客户端调用的控制器POST操作时。预期的JSON字符串是null/empty。我的想法是,也许这是因为stringify没有属性名称与数组中的每个值相关联。

问题:

如何解决空json字符串传递给mvc控制器?

下面是实现的要点——

模型:

public class Status
{
        [Key]
        public int ID { get; set; }

        public string Contact_Email { get; set; }
        public string RID { get; set; }
        public string Name { get; set; }

    }

表和AJAX post方法:

     <table id="statusTable" class="table table-hover table-bordered results">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Email</th>
                    <th>RID</th>
                    <th>Name</th>
                    <th>Update Record</th>

                </tr>
            </thead>
            <tbody>
            @foreach (var row in Model.ReleaseStatus)
            {
                    <tr>
                        <td>@Html.Raw(row.ID)</td>
                        <td>@Html.Raw(row.Contact_Email_Name)</td>
                        <td>@row.RID</td>
                        <td>@row.Name</td>
                        <td><button type="submit" class="btn btn-success">Update</button></td>
                    </tr>
              }
            </tbody>
        </table>

 $(".btn-success").click(function () {
            var $td = $(this).closest('tr').children("td"),
            len = $td.length;
            var tableData = $td.map(function (i) {
                if (i < len - 1)
                    return $(this).text();
            }).get();
            console.log(tableData);
            //Post JSON data to controller
            $.ajax({
                type: "POST",
                url: 'updateStatus',
                data: JSON.stringify(tableData),
                contentType: "application/json; charset=utf-8",
                success: function (response) {
                    console.log("post success");
                },
                error: function (request) {
                    console.log("post error" + request.error);
                }
            });

        });

最后是MVC控制器中的POST方法:

    [HttpPost]
    public ActionResult updateStatus(stirng jsonString)
    {
        //deserialise the json to a Status object here
    }

如何解决空json字符串传递给mvc控制器

你的控制器需要被创建来接受实际对象,而不是json字符串。

我指的是

[HttpPost]
public ActionResult updateStatus(stirng jsonString)
{
   //deserialise the json to a Status object here
}
应该

[HttpPost]
public ActionResult updateStatus(Status vm)
{
   //no need to deserialize - was already done by the model binder
}

为了让模型绑定器将json绑定到Status,您需要传递一个复制视图模型的json对象。

{
 ID:yourId, 
 Contact_Email:yourContactEmail, 
 RID:YourRID, 
 Name:yourName
}
在伪代码中,你可以:
var statusData = {
     ID:tableData[0], 
     Contact_Email:tableData[1],
     RID:tableData[2], 
     Name:tableData[3]
};

然后在ajax调用中,

data: JSON.stringify(statusData),

尝试from body属性

[HttpPost]
public ActionResult updateStatus([FromBody]Status status)
{
    //add the serialize attribute on your model 
}