【问题标题】:Serialize form to pass to ASP.Net web API序列化表单以传递给 ASP.Net Web API
【发布时间】:2016-04-27 02:57:07
【问题描述】:

在我开始重新创建轮子之前,谁能告诉我是否有办法自动执行此操作?我有一个视图模型,其中包含另一个对象类型的数组,有点像这样:

public class ParentViewModel {
    public int ID { get; set; }
    public string Title { get; set; }

    public ChildViewModel[] Children { get; set; } 
}


public class ChildViewModel {
    public string Description { get; set; }
    public int Severity { get; set; }
}

我正在调用一个以 ParentViewModel 作为参数的 web api 函数:

    [HttpPost]
    public void Test([FromBody]ParentViewModel vm) {
    }

这是从可以具有动态数量的子实体的网页调用的。该页面是使用 asp.net/Razor 创建的,因此这些绑定到带有 HTML 的输入字段,如下所示:

<input aria-invalid="false" class="form-control" id="Children_0__Description" name="Children[0].Description" value="test" type="text">

我有一个使用 ajax 调用 web api 的 javascript 事件处理程序。我想将表单数据传递给它,所以我序列化表单,使用 deparam 将其转换为对象,并在对象上调用 JSON.stringify。不幸的是,这并没有将诸如“Children[0].Description 之类的东西变成我的对象数组,因此当它访问 web api 时,它不会映射到视图模型的数组属性。即,我的 JSON 看起来像这样:

{
    "ID": "12",
    "Children[0].Severity" : "3",
    "Children[0].Description" : "Test", 
    "Children[1].Severity" : "5",
    "Children[1].Description" : "Another",
    "Title": "Hello"
}

而不是这样:

{
    "ID": "12",
    "Children" : [
        {"Severity":"3", "Description":"Test"},
        {"Severity":"5", "Description":"Another"},
        ],
    "Title": "Hello"
}

我正要编写一些代码来转换 json,但我猜我要么一开始就做错了,要么已经有一些东西可以为我做这件事 - 有什么建议吗?

【问题讨论】:

    标签: json ajax asp.net-web-api


    【解决方案1】:

    我不确定是否有更好的方法,但我已经解决了这个问题(没有什么比向别人描述你的问题来具体化你的想法了)。问题是 deparam 不是最好的库。相反,我发现 this 库正是我需要的。

    【讨论】:

      【解决方案2】:

      请检查this link是否与您的问题相同。如果是,您需要在 ajax 调用标头中添加内容类型。

      【讨论】:

      • 谢谢沙尚克。听起来很相似,但就我而言,我已经有了 contentType 属性
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多