2011-07-11 9 views
1

ビューモデルをビューに渡すと、作成中のチェックボックス(ここでは「Product」アイテムにマップされている)が確実に通過するようにすることができますコントローラに戻って?ビューモデルをASP.NET MVC 3エディットコントローラに渡す

私はビューモデルと「投稿」プロダクトコントローラを以下に含めました。

残念ながら、コントローラにポストバックすると、「Products」はnullになります。

namespace MyProject.Models 
{ 
    public class ChartViewModel 
    { 
     public Chart ChartItem { get; set; } 
     public IEnumerable<Product> Products { get; set; } 
    } 
} 

コントローラー:

チェックボックスは、私のビューに追加私の見解モデル内で "製品" のオブジェクトにマッピングされている方法:

@{ 
    foreach (MyProject.Models.Product objProduct in Model.Products) 
{ 
      @Html.CheckBox("product" + objProduct.Id, Model.ChartItem.ChartProducts.Select(t => t.ProductId).Contains(objProduct.Id)); 
      @String.Format("{0} {1}", objProduct.Manufacturer.Name, objProduct.Name);<br /> 
} 
} 

答えて

1

あなたは(あなたのリストを送信することができますIEnumerable<T>)をビューに戻しますが、コントローラーに戻ってこないときに表示されます。値を持つViewModelの唯一のプロパティは、フォームコレクション内の正確に一致するアイテムを持つプロパティです。だから、のようなViewModelにプロパティを追加してください。

これはコントローラに戻るその選択された値を送信し、ドロップダウンリストを設定します:

<div class="editor-field"> 
    @Html.DropDownListFor(m => m.SelectedEmployeeID, 
     new SelectList(Model.EmployeeList, "EmployeeID", "EmployeeName"), "--Please select an Employee--") 
    @Html.ValidationMessageFor(model => model.SelectedEmployeeID) 
</div> 

お知らせ:プロパティが設定されているがSelectedEmployeeIDですが、これはEmployeeListから来ています。あなたのケースでは

多くの値がコレクションにある(唯一のチェックボックスをポストに送信されます「確認」)ので、あなたは行うことができます:それがそのチェックした場合

string value = collection["myProductID"]; 

を。

ごめんなさい、申し訳ありませんが、これは少し急いでいました。詳細はこちらをご覧ください:
MVC 3 form post and persisting model data