所以我有一个具有这样一个产品可以生产站点的列表视图模型调用ProductViewModel。 我试图找出如何使用复选框以供用户选择该产品可以生产地点在表单上显示此。 似乎直线前进,对不对? 那么它不工作像我想/需要。 希望有人能帮助引导我正确的方式做到这一点。
我的课程:
public class ProductViewModel
{
public List<Sites> SiteList {get; set;}
public string ProductName {get; set;}
public int ProductId {get; set;}
public User ProductOwner{get; set;}
}
public class Sites
{
public int SiteId {get; set;}
public string SiteName {get; set;}
public bool IsSelected {get; set;}
}
我的部分观点:
@Html.LabelFor(m=>m.Sites):
@foreach (var site in Model.Sites)
{
@Html.CheckBox("Sites", site.IsSelected, new { value = site.SiteName })
@Html.Label(site.SiteName)
}
当使用@ Html.Checkbox()我看到从浏览器的HTML输出如下:
<input checked="checked" id="Sites" name="Sites" type="checkbox" value="Miami" />
<input name="Sites" type="hidden" value="false" />
我理解的隐藏字段,但我真正需要的是让所选择项的值。 所以,我需要回到迈阿密的名单中了。 我不需要假/真东西的HTML帮助似乎要送(即迈阿密=真)
所以不是我尝试这样做。
@for(int id=0; id < Model.Sites.Count(); id++)
{
<input type="checkbox" id="@Model.Sites[id].SiteName" name="Sites[@id]" value="@Model.BoxingSites[id].SiteName" @(Model.Sites[id].IsSelected ? @"checked=""checked""": "") />
@Html.Label(Model.Sites[id].SiteName)
}
而输出是:
<input type="checkbox" id="Miami" name="Sites[0]" value="Miami" checked="checked" />
<label for="Miami">Miami</label>
在这两种情况下,我不能够得到粘结剂张贴到行动时,表单值映射到Product.Sites列表。
该行动是这样的:
[HttpPost]
public ActionResult Edit(ProductViewModel Product)
{
//Does something with the form data.
}
其他值(产品名称等)映射罚款。
我究竟做错了什么? 我觉得我失去了一些东西,因为这应该更容易由于MVC如何简化许多其他形式的处理情况。
提前致谢...