我正在尝试将一个简单的对象(AjaxSubmission)从表单发送到用于编辑表的 Web API 控制器。
AjaxSubmission 始终具有相同的字段。一个字段,“数据”是指另一个简单的对象,它具有特定表的访问器(下面的员工或供应商示例)。
public class AjaxSubmission
{
public string action { get; set; }
public string table { get; set; }
public string id { get; set; }
// ...
//// The following may be any other custom class
public Employees data { get; set; } // Could be Vendors or whatever
}
// Stored in AjaxSubmission (or so I hope)
public class Employees
{
public string name { get; set; }
public float salary { get; set; }
public long id { get; set; }
}
// Stored in AjaxSubmission
public class Vendors
{
public string dba { get; set; }
public int accountNum { get; set; }
public int zipcode { get; set; }
}
我的控制器像这样获取数据:
public EditorServerResponse Put(AjaxSubmission ajaxSubmission = null) {
// Handle the data
}
- 当我将“数据”设为对象或动态时,它显示为空对象。我不能将它“作为”给员工或供应商,因为它不存储任何东西。
- 我怀疑这是序列化程序的限制。MVC4 将 JSON.NET 用于 JSON,但数据以“Content-Type: application/x-www-form-urlencoded; charset=UTF-8”的形式发送。
- 我不能轻易更改数据的发送方式,因为这就是 Datatables 编辑器插件的工作方式。我认为这是发送数据的合理方式,也是.NET 能够处理的合理问题。
- 如果我为 AjaxSubmission 可能包含的每种数据类型创建一个不同的类,我可以获得我需要的数据,但除了一行代码之外,每个数据类型都是重复的。这严重违反了 DRY 原则。
我的问题是:如何在不重复自己的情况下发送 AjaxSubmission?.NET 有能力做这样的事情吗?
编辑:提琴手说数据看起来像:
action edit
table
id row_4
data[amu] 49
data[chemicalFormula] BF2
data[commonName] Boron difluoride
data[status] Y
data[notes]
原始数据为:action=edit&table=&id=row_4&data%5Bamu%5D=49&data%5BchemicalFormula%5D=BF2&data%5BcommonName%5D=Boron+difluoride&data%5Bstatus%5D=Y&data%5Bnotes%5D=
(这与我的简化示例不同但相似)