2012-03-27 6 views
0

私はカスタムタイプのリストを含むモデルを持っています。HttpPostでモデルにリストオブジェクトを保持するにはどうすればいいですか?

HttpPostとしてモデルを送信したときに、このタイプのデータを戻したい場合があります。

しかし、私がしたいことはしていないようです。私はこれまでのところPassing IEnumerable or list Model to Controller using HttpPostに従っていますが、問題があります。

私のコントローラメソッド:今すぐ

[HttpPost] 
    public ActionResult UpdateStock(int id, ProductModel model) 
    { 
     return View("UpdateStock", model); 
    } 

、ビューはこの(トリミング)のようなものです:

@using (Html.BeginForm()) 
{ 
<div> 
    <p> 
    <input type="submit" value="Save" /> 
    </p> 

    @Html.HiddenFor(m => m.ProductNo) 

    <div class = "title"> 
    @Html.LabelFor(m => m.ProductName) 
    @Html.EditorFor(m => m.ProductName) 
    </div> 

      @for (int i = 0; i < Model.Stock.Count; i++) 
      { 
       var item = Model.Stock[i]; 
       <div class="editor-field"> 
        <input type="text" name="Model.Stock[@i].Key" 
         value="@item.Key" /> 
       </div> 
       <div class="editor-field"> 
        <input type="text" name="Model.Stock[@i].Value" 
         value="@item.Value" /> 
       </div> 
      } 
} 

私の問題は、@Html.EditorFor()<input type=.../>タグはしていないようだと思われること、ですお互いによく遊ぶ。上記のような場合、ProductNo@Htmlメソッドを使用するその他のプロパティはモデルに渡されません。

アドバイスをいただければ幸いです。

答えて

2

私は単純に、エディタのテンプレートを使用します。

モデル:

public class ProductModel 
{ 
    public string ProductNo { get; set; } 
    public string ProductName { get; set; } 
    public IEnumerable<Stock> Stocks { get; set; } 
} 

public class Stock 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 
} 

をコントローラー:

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new ProductModel 
     { 
      ProductNo = "123", 
      ProductName = "p name", 
      Stocks = new[] 
      { 
       new Stock { Key = "key1", Value = "value1" }, 
       new Stock { Key = "key2", Value = "value2" }, 
      } 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(ProductModel model) 
    { 
     ... 
    } 
} 

ビュー:

@model ProductModel 
@using (Html.BeginForm()) 
{ 
    <p> 
     <input type="submit" value="Save" /> 
    </p> 

    @Html.HiddenFor(m => m.ProductNo) 

    <div class = "title"> 
     @Html.LabelFor(m => m.ProductName) 
     @Html.EditorFor(m => m.ProductName) 
    </div> 

    @Html.EditorFor(x => x.Stocks) 
} 

、その後、あなたがカスタムエディタのテンプレートを定義しますために在庫タイプ(~/Views/Shared/EditorTemplates/Stock.cshtml):応答のための

@model Stock 
<div class="editor-field"> 
    @Html.EditorFor(x => x.Key) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(x => x.Value) 
</div> 
+0

ありがとう!これはうまくいく。 – TZHX

関連する問題