将视图模型(如下所示)传递给视图时,如何确保我正在创建的复选框(映射到此处的“Product”项)被传递回控制器?
我已将视图模型和“发布”产品控制器包含在下面。
不幸的是,当回发到控制器时,“Products”为空。
namespace MyProject.Models
{
public class ChartViewModel
{
public Chart ChartItem { get; set; }
public IEnumerable<Product> Products { get; set; }
}
}
控制器:
[Authorize]
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(ChartViewModel objChartViewModel)
{
if (!TryUpdateModel(objChartViewModel))
{
return View(objChartViewModel);
}
else
{
} return View("Details", objChartViewModel);
}
如何将复选框添加到我的视图中,映射到视图模型中的“Product”对象:
@{
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 />
}
}
答案 0 :(得分:1)
您可以将列表(IEnumerable<T>
)向下发送到视图,但是当它们没有返回到控制器时。 ViewModel中唯一具有值的属性是表单集合中具有完全匹配项的属性。因此,像SelectedProductID
一样向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"];
如果它已经检查过。
抱歉这个混乱,这有点匆忙。有关详细信息,请参阅此信息: