【问题标题】:JSON Object - JavaScript, C#, MVCJSON 对象 - JavaScript、C#、MVC
【发布时间】:2019-04-30 17:50:00
【问题描述】:

我有一个填充数组的for,其中cont 来自视图

function GenerateJSON(cont) {
        var songs= [];

        for (var i = 0; i <= cont; i++) {
            songs[i] = {
                id: i,
                genre: $(".genre" + i).val(),
                song: $(".song" + i).val()
           }
        }
        $.ajax({
            url: "Generate",
            type: 'POST',
            dataType: "json",
            data: { songs: JSON.stringify(songs) },
            success: function (data) {
            }
        })
    }

在控制器上,我只有一个块音乐

示例:

songs= [{"id":0,"genre":"","song":"","id":1,"genre":"","song":"","id":2,"genre":"","song":""}]

我想要这个:

songs=[{"id":0,"genre":"","song":""},{"id":1,"genre":"","song":""},{id":2,"genre":"","song":""}]

控制器

public JsonResult Generate(string[] songs)
    {}

【问题讨论】:

  • 对不起,Leooso。对本网站的问题需要用英文发布。
  • 哦,对不起,我来翻译
  • 为什么不使用具有该结构的视图模型而不是使用字符串然后再解析?
  • 你不能让同一个变量保存 3 个不同的值......你可以得到的更好的方法是有一个 songs 数组,里面有对象,比如:songs = [{"id":0...}, {"id":1...}, ...]
  • @CalvinNunes,是的,这就是我喜欢的:songs = [{"id":0...}, {"id":1...},...],对不起.但我做不到..我会编辑

标签: javascript c# json asp.net-mvc


【解决方案1】:

使用字符串数组作为参数对我来说没有意义。现在您必须编写客户端代码来构建一些复杂的字符串,而在服务器端您必须解析它以获取每个项目的属性值。

恕我直言,干净的方法是使用视图模型并利用 MVC 模型绑定。首先创建一个视图模型来表示您的数据。

public class SongVm
{
    public int Id { set; get; }
    public string Genre { set; get; }
    public string Song { set; get; }
}

现在将其用作您的操作方法的参数。由于您要发送对象的集合,请使用 List&lt;SongVm&gt; 作为参数。

[HttpPost]
public ActionResult Gerar(List<SongVm> songs)
{
    // Simply returning the data with a message property as well
    return Json(new { messge ="success", data = songs });
}

现在从客户端代码发送数组的 JSON 字符串版本,同时将 application/json 指定为我们传递给 $.ajax 方法的选项的 contentType 属性的值。

var songs = [];

for (var i = 0; i <= cont; i++) {
    songs[i] = {
        id: i,
        genre : "test genre" + i,
        song : "test song" + i
    };
}

$.ajax({
        url: "/Home/Gerar",
        type: 'POST',
        contentType: "application/json",
        data: JSON.stringify(songs),
        success: function (data) {
            console.log(data);
        },
        error: function (a, b, c) {
            console.log(c);
        }
 })

现在$.ajax 会将请求标头Content-Type 添加到值为application/json 的调用中。作为模型绑定的一部分,默认模型绑定器会读取这个请求头的值,然后决定从请求体中读取数据(请求负载)

我还建议利用像 Url.Action 这样的 Url 辅助方法来生成操作方法的正确相对路径。

【讨论】:

  • 我会尝试,我是 ajax 新手以及如何在视图和控制器之间传递数据
  • 我得到一个错误,a: [object Object] - b: error - c: Not Found
  • 看起来您的代码正在进入error 处理程序。你有写成error: function (a, b, c) 吗?
  • 我明白了。非常感谢,又一个粗心的错误,我输入了 /../Generate(英语),但我需要 /../Gerar(我的语言)
  • 很好的答案,模型、控制器和视图的例子很好!
猜你喜欢
  • 2013-11-02
  • 1970-01-01
  • 2016-06-22
  • 2018-05-23
  • 2011-12-30
  • 2018-11-12
  • 1970-01-01
  • 2012-03-22
  • 2015-02-15
相关资源
最近更新 更多