単純なオブジェクト (AjaxSubmission) をフォームから、テーブルの編集に使用される Web API コントローラーに送信しようとしています。
AjaxSubmission には常に同じフィールドがあります。1 つのフィールド「データ」は、特定のテーブルのアクセサを持つ別の単純なオブジェクトを参照します (以下の従業員またはベンダーの例)。
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
}
- 「データ」をオブジェクトまたはダイナミックにすると、空のオブジェクトとして表示されます。何も保存しないため、従業員またはベンダーに「as」することはできません。
- これはシリアライザーの制限であると思われます。MVC4 は JSON に JSON.NET を使用しますが、データは「Content-Type: application/x-www-form-urlencoded; charset=UTF-8」として送信されます。
- データの送信方法を簡単に変更することはできません。それが、Datatables エディター プラグインが機能する方法だからです。これは、データを送信する合理的な方法であり、.NET が処理できる合理的な問題だと思います。
- AjaxSubmission に含まれる可能性のあるデータ型ごとに個別のクラスを作成すれば、必要なデータを取得できますが、それぞれが 1 行のコードを除いて重複することになります。これは DRY の原則にひどく違反しています。
私の質問は次のとおりです。自分自身を繰り返さずに AjaxSubmission を送信するにはどうすればよいですか? .NET はそのようなことを実行できますか?
編集: Fiddler によると、データは次のようになります。
action edit
table
id row_4
data[amu] 49
data[chemicalFormula] BF2
data[commonName] Boron difluoride
data[status] Y
data[notes]
生データは次のとおりです。
(これは私の単純化された例とは異なりますが、似ています)