2011-07-11 240 views
1

將視圖模型(如下所示)傳遞給視圖時,如何確保我創建的複選框(映射到此處的「產品」項)得到通過回到控制器?將視圖模型傳遞給ASP.NET MVC 3編輯控制器

我在下面列出了我的視圖模型和「後」產品控制器。

不幸的是,當回發給控制器時,「產品」爲空。

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

您可以將您的列表(但是當他們沒有回到控制器。您的ViewModel中具有值的唯一屬性是那些在表單集合中具有完全匹配項的屬性。因此,添加一個屬性到您的ViewModel,如SelectedProductID

這就建立了一個下拉列表將其選中的值回控制器:

<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

相關問題