1

複雑なモデルがある場合、フォームを送信すると、すべてのモデル プロパティのすべての値が得られないという問題に直面しています。以下の例では、gridModel プロパティが返されません。

モデル

public class InventoryModel {
    public GridModel GridModel { get; set; }
    public Int32 UserKey { get; set; }
}

public class GridModel {
    public String GridId { get; set; }
    public String GridName { get; set; }
    public List<String> columns { get; set; }
}

コントローラ

public ActionResult Index(){
    InventoryModel model = new InventoryModel();

    model.UserKey= 20014;
    model.GridModel = new GridModel();
    model.GridModel.GridId = "jqgInventory";
    model.GridModel.GridName = "Inventory Grid";
    return View(model);
}

 [HttpPost]
 public ActionResult Index(InventoryModel model){
    Int32 userId = model.UserKey; // This has a value
    String gridId = model.GridModel.GridId;  // This doesn't have a value
    String gridName= model.GridModel.GridName; // This doesn't have a value
}

意見

@model InventoryModel
@using (Html.BeginForm()) {
    @Html.TextBoxFor(m => m.UserKey, new { @class = "w200" })
    @Html.TextBoxFor(m => m.GridModel.GridId , new { @class = "w200" })
    @Html.TextBoxFor(m => m.GridModel.GridName, new { @class = "w200" })

    <input type="submit" value="Submit" />
}

任意の提案をいただければ幸いです。

ありがとう、アラー

4

1 に答える 1

3

代わりに、実際のモデルではなく ViewModel を使用できます。これは、ビュー専用のデータを反映するよりフラットなクラスになります。

public class InventoryViewModel{
    Int32 UserKey {get; set; }
    public String GridId { get; set; }
    public String GridName { get; set; }        
}

コントローラーは、必要に応じてモデルを ViewModel にマップできます

于 2012-06-01T21:39:01.133 に答える