0

単純なオブジェクト (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] 

生データは次のとおりです。

(これは私の単純化された例とは異なりますが、似ています)

4

0 に答える 0