我希望有如下内容:
@foreach(var option in ViewBag.OptionsAvailable)
{
//the 'option' variable will be used in these fields, of course
<input type='checkbox' name='thingToUse' />
<input type='text' name='textToSaveForThing' />
}
ViewBag.OptionsAvailable
可以是可变长度。 我想采用这些选项之一,如果选中了它的复选框,则使用保存的值将其添加到 Model.Options
。这里的想法是,在 HttpPost
Controller 方法,如果选中相应的复选框,我只想确认/保存文本框中的值。解决这个问题的最佳方法是什么?
我遇到了 this explanation绑定(bind)到列表,但我不确定如何在此基础上发展以创建我想要的东西。
首先创建一个 View 模型来表示您想要显示/编辑的内容
public class OptionVM
{
public string Text { get; set; }
public bool IsSelected { get; set; }
public string Answer { get; set; }
.... // other properties
}
然后在 Controller 中,初始化您的 View 模型的集合并将其传递给 View
public ActionResult Edit()
{
List<OptionVM> model = new List<OptionVM>();
.... // populate it
return View(model);
}
和 View
@model List<yourAssembly.OptionVM>
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Count; i++)
{
<label>
@Html.CheckBoxFor(m => m[i].IsSelected)
<span>@Model[i].Text</span>
</label>
@Html.TextBoxFor(m => m[i].Answer)
@Html.ValidationMessageFor(m => m[i].Answer)
}
<input type="submit" ... />
}
并提交给
public ActionResult Edit(List<OptionVM> model)
{
// for example, get the answers where the checkbox has been selected
var selectedAnswers = model.Where(m => m.IsSelected).Select(m => m.Answer);
}
您可以使用 foolproof 来增强它[RequiredIfTrue]
或应用于 Answer
属性的类似验证属性,以确保在选中相应的复选框时文本框具有值
我是一名优秀的程序员,十分优秀!