所以我有这个简单的模型:
public class OptOut
{
public int optOutID { get; set; }
public bool hasOptedOut { get; set; }
public List<Cohort> list { get; set; }
public OptOut()
{
List<Cohort> list = new List<Cohort>();
list.Add(new Cohort());
list.Add(new Cohort());
list.Add(new Cohort());
list.Add(new Cohort());
this.list = list;
}
}
您可以在其中看到其中一个属性是List
个Cohort
个对象。 Cohort
对象有一些简单的布尔属性:
public class Cohort
{
public bool ukft { get; set; }
public bool ukpt { get; set; }
...etc
}
我想创建一个循环遍历Cohort
对象列表的表单。
因此,在我的Controller
我将模型传递给View
:
public ActionResult Page()
{
return View(new OptOut());
}
然后在html中我创建了一个这样的表单:
@using (Html.BeginForm("OptedOut", "Home"))
{ var m = Model.list;
<div id="radios" class="form-group" style="margin-top:25px;">
@Html.RadioButtonFor(model => Model.hasOptedOut, true) <span style="margin-right:8px;">Yes</span>
@Html.RadioButtonFor(model => Model.hasOptedOut, false) <span>No</span> <br />
//here I would normally loop through the list but I'm changing only the first element for testing purposes
@Html.RadioButtonFor(model => m.ElementAt(0).ukft, true) <span style="margin-right:8px;">Yes</span>
@Html.RadioButtonFor(model => m.ElementAt(0).ukft, false) <span>No</span> <br />
</div>
<div class="form-group">
<input id="confirm" type="submit" value="Confirm" class="btn btn-success btn-lg"/>
</div>
}
到目前为止一切顺利。如您所见,我添加了两组单选按钮 - 一个用于hasOptedOut
模型中的简单OptOut
布尔属性,另一个用于第一个元素的ukft
属性。 List
。
现在,当我在两组单选按钮中选择是(true
)时,我应该看到hasOptedOut = true
和ukft = true
对象中的Cohort
List
。所以我在POST
之后在控制器中得到了模型:
[HttpPost]
public ActionResult OptedOut(Dlhe.Smart.Models.OptOut optout)
{
return View("some_view");
}
hasOptedOut
确实如此。但是,ukft
在列表中仍然为false。所以我认为Lists
不是那么简单,但我该如何解决这个问题?
编辑:
正如所建议的那样,我试过这样做,没有运气:
@using (Html.BeginForm("OptedOut", "Home"))
{ var m = Model.list;
for (int i=0; i<Model.list.Count(); i++) {
<div id="radios" class="form-group" style="margin-top:25px;">
@Html.RadioButtonFor(model => m[i].ukft, true) <span style="margin-right:8px;">Yes</span>
@Html.RadioButtonFor(model => m[i].ukft, false) <span>No</span> <br />
</div>
}
<div class="form-group" style="margin-top:25px;">
<input id="confirm" type="submit" value="Confirm" class="btn btn-success btn-lg"/>
</div>
}
答案 0 :(得分:1)
我认为最简单的方法是为您的类型创建一个EditorTemplate。
创建EditorTemplate:
1)在Views / Shared文件夹中创建一个名为Editor Templates
的新文件夹2)在该文件夹中,创建一个新的强类型局部视图,其中您的类型名称为文件名。 E.G Cohort.cshtml看起来像:
@model Models.Cohort
@Html.RadioButtonFor(model => model.ukft, true) <span style="margin-right:8px;">Yes</span>
@Html.RadioButtonFor(model => model.ukft, false) <span>No</span> <br />
3)在主视图中使用@ Html.EditorFor(model =&gt; model.list),razor将为列表中的每个同类群组渲染在步骤2中创建的局部视图。