@skills
">
我正在使用ASP.NET MVC来填充一组复选框。这些复选框随用户在上一个视图中选择的内容而变化。我正在使用Razor。在视图中,我有:
@foreach (var skills in Model.SkillsAvailable)
{
<input name="pack" type="checkbox" value="@skills" /> @skills<br />
}
@Html.HiddenFor(m => m.SkillsSelected, new { @class = "hidden" })
我还有几个看起来与此几乎相同的单选单选按钮。它的功能是在更改时采用所选选项并填充HiddenFor。HiddenFor在提交时传递给控件。这没什么问题。
但对于我的checkbox,我不确定如何将多个项目发回。如果此列表填充了10项,而用户只能选择2项,我如何将它们添加到list SkillsSelected?
我的第一个直觉是,我可以使用另一个foreach循环以某种方式添加(就像选中的foreach一样,添加到列表中)。但我不知道这看起来是什么样子,谷歌搜索除了使用bools之外没有显示任何东西,如果列表每次都是相同的,这是有意义的,但如果列表根据之前的选择有5到30个选项就不是这样了。
在这一点上,我没有任何jQuery来控制这个部分,所以我没有它的代码。我的控制器可以很好地填充复选框列表,但不会处理其他任何事情。
我的模型中唯一重要的属性是这些,在必要时更改它们是没有问题的:
public List<string> SkillsAvailable { get; set; }
public List<string> SkillsSelected { get; set; }
发布于 2019-08-01 17:08:11
视图(razor)中列表的诀窍是使用for循环而不是foreach。这样,您的html元素将被视为数组。下面是你的例子:
模型中的更改,将SkillsSelected属性列表作为布尔值的持有者
public List<string> SkillsAvailable { get; set; }
public List<bool> SkillsSelected { get; set; }
然后,在视图上,使用for循环
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
for (int i = 0; i < Model.SkillsAvailable.Count; i++)
{
@Html.CheckBoxFor(m => Model.SkillsSelected[i]) @Model.SkillsAvailable[i] <br />
@Html.HiddenFor(m => Model.SkillsAvailable[i])
}
<input type="submit" value="Submit" />
}
作为参考,这里有一个关于如何在控制器中传递和接收模型的示例
public ActionResult Index()
{
var model = new Model1()
{
SkillsAvailable = new List<string>() { "Uno", "Dos", "Tres" }
};
return View(model);
}
[HttpPost]
public ActionResult Index(Model1 model)
{
return View(model);
}
https://stackoverflow.com/questions/57312680
复制相似问题