当模型是数组的一部分时,模型内部的数组不绑定

时间:2016-06-13 14:25:42

标签: javascript c# .net ajax

所以我有一个保存“链接”对象的rest API。现在用于添加“链接”对象的其余API一次一个地绑定到模型,但是当它传递的“链接”对象数组时它不绑定字符串列表。我已经尝试使用包含链接列表和链接[]的模型。

模型就是这个

public class Link
{
    [JsonProperty(PropertyName = "name")]
    public string name { get; set; }

    [JsonProperty(PropertyName = "fields")]
    public List<string> fields { get; set; }

    [JsonProperty(PropertyName = "imgPath")]
    public string imgPath { get; set; }

    [JsonProperty(PropertyName = "category")]
    public string category { get; set; }
}

控制器中的功能是

public string PostLinkList([FromBody] List<Link> links)
    {


        string json;


        bool waiting = true;
        int timeWaiting = 0;
        do
        {
            try
            {
                using (StreamWriter outfile = new StreamWriter("App_Data/linkObjs.txt", false))
                {
                    for (int i = 0; i < links.Length; i++)
                    {
                        json = JsonConvert.SerializeObject(links[i]);
                        outfile.Write(json + "\n");
                    }

                }
                waiting = false;
            }
            catch (Exception e)
            {
                timeWaiting++;
                if (timeWaiting > 20)
                {
                    waiting = false;
                }
            }

        } while (waiting);
        return JsonConvert.SerializeObject(links);
    }

前端看起来像这样

 $(".category").each(function ()
    {
        var tag = $(this).attr("id");
        var category = $(this).find(".issueTitle").children("span").text();
        $("#" + tag + " button").each(function ()
        {
            var imgPath = $(this).children("i").attr("class");
            var fields = $(this).attr("name").split(",");
            var name = $(this).children("p").children("span").text();
            links[i] = {
                name: name,
                fields: fields,
                imgPath: imgPath,
                category: category
            };
            i++;
        });

    });
    $.ajax(
    {

        url: "/api/Link",
        type: "Post",
        async: false,
        contentType:"application/json",
        dataType: "json",
        data: links,
        success: function () { populate(); },
        error: function () { alert("failed to populate"); }
    });

Hes什么,作为字符串,格式看起来像/这是传递给后端的字符串

"[
{\"name\":\"test name\",
\"fields\":[\"field\",\"details\"],
\"imgPath\":\"optImg icon-print\",
\"category\":\"test\"},
{\"name\":\"test name\",
\"fields\":[\"field\",\"details\"],
\"imgPath\":\"optImg icon-print\",
\"category\":\"test\"},
{\"name\":\"test name\",
\"fields\":[\"field\",\"details\"],
\"imgPath\":\"optImg icon-print\",
\"category\":\"test\"}
]"

2 个答案:

答案 0 :(得分:0)

好的,找到了修复它的东西。我不得不创建一个新的虚拟目录,因为更新的代码没有运行。比JSON.strigify发送链接到后端有一个Link []没有列表修复所有问题谢谢你们的帮助。对不起,如果我浪费你的时间。

答案 1 :(得分:0)

在进行jquery Ajax调用时,您需要指定并使用 json.stringify 来序列化json对象。