【问题标题】:how to send generic list with json如何使用 json 发送通用列表
【发布时间】:2019-12-04 11:57:29
【问题描述】:

我有通用列表要查看。

List<Student> StudentList = ViewBag.StudentList;

我想用 JSON 发送这个列表。

var listSTD = @StudentList;
var id = 5;
    $.ajax({
        url: "/Students/Check",
        type: "POST",
        dataType: 'json',
        data: {"listSTD": listSTD, "id": id},
        contentType: "application/json; charset=utf-8",
        success: function(result) {
            alert(result.Result);
        }
    });

但不工作。在这段代码中得到错误:

var listSTD = @StudentList;

【问题讨论】:

  • 错误是.....?
  • = @StudentList; 显然无效。视图可以访问模型、Temp 字典和 ViewBag。如果您想从 ViewBag 访问某些内容,请使用您在 C# 中使用的相同语法,例如 @ViewBag.StudentList@ 之后的所有内容都是 C# 代码

标签: c# json asp.net-mvc


【解决方案1】:

您不应该将 List&lt;Student 对象直接传递给您的脚本,因为该对象不是 js 可以读取或使用的格式,因此您需要将 JSON 序列化为 JSON 字符串,然后您可以将其包含在您的帖子请求的数据主体。

您可以使用Newtonsoft.Json 序列化对象,并且您需要确保listSTD 变量在视图呈现时内联实例化,而不是在外部文件中(您的其余代码可以在外部js文件中)。例如:

<html>
  <body>
    @{ List<Student> StudentList = ViewBag.StudentList; }

    <script>
       var listSTD = "@JsonConvert.SerializeObject(StudentList)";
    </script>
  </body>
<html>

在响应您在 /Students/Check 的发布请求的服务器端控制器操作上,您可以将发布的学生列表 JSON 反序列化回 List&lt;Student&gt; 例如在您的控制器操作中:

public class StudentsController
{
  public ActionResult Check(StudentsCheckViewModel model)
  {
     int id = model.id;
     List<Student> Students = Json.DeserializeObject<List<Student>>(model.listSTD);
  }
}

还有视图模型:

public class StudentsCheckViewModel 
{
   public int id { get; set; }

   public string listSTD { get; set; }
}

【讨论】:

  • 这段代码的 json 动作输入是什么?我使用这个,但发送空列表。
  • @mishicaro 你没有问任何关于行动的事情。您问如何将 JSON 数组发送到视图中
  • 你有Newtonsoft.Json吗?如果不是,则生成的序列化 JSON 字符串可能为 null 或错误。在 nuget 中安装:Install-Package Newtonsoft.Json
  • 我想在 /Students/Check 的输入操作中使用此列表。
  • 代码中没有错误。但发送或给出空的空列表。我在“/Students/Check”地址中使用 List 输入 json 操作
【解决方案2】:

您可以使用 JSON 助手将数据作为 JSON 序列化到视图中,例如:

<script type="text/javascript" charset="utf-8">

    var rowData = @Json.Serialize(Model.Rows);
    ...

</script>

在旧版本中,您可能必须使用Json.Encode 或将调用包装在Html.Raw 中,例如@Html.Raw(Json.Serialize(...))

【讨论】:

  • 我没有序列化方法。并使用编码但不工作......
  • @mishicaro 我从自己的项目中复制了该代码。您使用的是哪个 ASP.NET MVC 版本,not working 是什么意思?您在页面源代码中看到了什么?
  • @mishicaro ASP.NET MVC 6 确实有 Json.Serialize 如图所示in this possibly duplicate question
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 2016-11-28
  • 2016-04-08
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多