这是我的HTML -
<td>
@{
IEnumerable<SelectListItem> Brands = ViewBag.GetBrands;
foreach (var item in Brands)
{
@Html.CheckBox(item.Text, false)
<label>@item.Text</label><br />
}
}
</td>
我将此控制器作为JSON数据(表单集合)发布。如何在控制器中的表单集合数据中获取复选框text
和value
?
答案 0 :(得分:1)
如何在控制器中获取表单集合数据中的复选框文本和值?
正确的方法是使用视图模型而不是此IEnumerable<SelectListItem>
。所以基本上你的模型看起来像这样:
public class BrandViewModel
{
public string Text { get; set; }
public bool Checked { get; set; }
}
然后将属性添加到类型为IList<BrandViewModel>
的主视图模型(您的视图强烈输入的模型):
public IList<BrandViewModel> Brands { get; set; }
然后很容易:
<td>
@for (var i = 0; i < Model.Brands.Count; i++)
{
@Html.CheckBoxFor(x => x.Brands[i].Checked)
@Html.LabelFor(x => x.Brands[i].Checked, Model.Brands[i].Text)
@Html.HiddenFor(x => x.Brands[i].Text)
}
</td>
最后你可以从你的控制器动作中删除任何弱类型的FormCollection,并简单地采用视图模型:
[HttpPost]
public ActionResult SomeAction(IList<BrandViewModel> brands)
{
...
}
或者如果还有其他属性需要传递控制器操作,则可以采用主视图模型:
[HttpPost]
public ActionResult SomeAction(MainViewModel model)
{
// the model.Brands collection will be automatically bound here
...
}
答案 1 :(得分:1)
我设法通过 -
获取ID@Html.CheckBox(item.Text, false, new {item.Value})
答案 2 :(得分:0)
首先你必须回复服务器。
@using (Html.BeginForm("actionname", "controller",
FormMethod.Post))
//your code
@{
IEnumerable<SelectListItem> Brands = ViewBag.GetBrands;
foreach (var item in Brands)
{
@Html.CheckBox(item.Text, false)
<label>@item.Text</label><br />
}
}
<input type="submit" class="k-button" value="Submit" id="btnSubmit" name="btnSubmit" />
}
现在在控制器中,您将使用表单集合
获取值[HttpPost]
public ActionResult actionName( FormCollection collection)
{
collection.keys["checkbox"].value ... your code
}