2011-07-11 176 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

相关问题