0

私は少し混乱しています。

私はかなり標準的な MVC3 セットアップを持っています: Home Controller/Index メソッド、ViewModel への厳密に型指定されたビュー。

私のViewModelは、3つの一般的なリスト(スキーム、タイプ、テーブル)のコレクションです。

TableModel スキーム リストの種類リスト TablesList

スキームとタイプは、ドロップダウンを入力して、@foreach ループを介して HTML テーブルに入力する 3 番目の (Tables) コレクションでフィルターとして機能します

Home/Index (引数なし) への呼び出しを介してこれらを設定します。これはうまくいきます。ここで、チェックボックスをオンにして、TablesList コレクションからいくつかの行を削除するようにマークしたいと考えています。次に、[送信] をクリックすると、Post を介して削除が実行され、テーブルの内容が更新され、残りのテーブルが同じ場所 (既存の HTML テーブルを置き換えます

私の Index View には、次のセクションがあります。

@using (Html.BeginForm("DeleteTables", "Home"))
{
    @Html.Hidden("tableList", @Model.TablesList)
    <input id="deleteButton" type="submit"  />
}

私の HomeController には、次のような POST メソッドがあります

[HttpPost]
public ActionResult DeleteTables(List<ViewModel.ITableInformation> tableList)
{
    var deleteableTableIds = from t in tableList
                             where t.DeleteTable
                             select t.TableId;

    this.tableModel.DeleteTablesById(deleteableTableIds.ToList());


    .... execute a db call to get remaining tables and return a PartialView or JSON              
    }

問題は、この関数のtableList引数にモデルが含まれていることを期待していますが、空です。

私が間違っていることを考えてください-これはかなり新しいのではないかと思います。

ありがとう

4

1 に答える 1

2

隠されたものは複雑なオブジェクトを取ることはできません。あなたがする必要があるのは、各オブジェクトを逆シリアル化し、それを文字列として非表示に格納することです。

@{
  var tableIDs = "";

  foreach (var i in Model.TablesList) {
     tableIDs = //serialized object in proper format
  }
}

@Html.Hidden("tableList", @tableIDs)

サーバーから、カスタムモデルバインダーを介してオブジェクトを作成するか、文字列型の入力を受け入れて、コレクションを逆シリアル化できます。

HTH。

于 2012-09-13T13:30:08.500 に答える