0

我正在尝试将一个简单的对象(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=

(这与我的简化示例不同但相似)

4

0 回答 0