我有一个视图,用户将使用单选按钮选择一个值。我的问题是,一旦用户单击提交,View模型(在我的控制器中)中的值为空。我的观点模型如下:
public class PreconditionsViewModel
{
public List<KeyValuePair<int, string>> Provinces { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/mm/yy}", ApplyFormatInEditMode = true)]
public DateTime SeedingDate { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/mm/yy}", ApplyFormatInEditMode = true)]
public DateTime HarvestDate { get; set; }
public int DryMatterPercentage { get; set; }
public int PostalCode { get; set; }
}
动作方法: (为简单起见,我让方法只返回索引。但我应该能够看到模型的含义)
[HttpPost]
public ActionResult Save(PreconditionsViewModel model)
{
return View("Index");
}
观点:
@using (Html.BeginForm("Save", "Precondition", FormMethod.Post, new { @class="userPreconditionForm" }))
{
foreach (var province in Model.Provinces)
{
@Html.Label(province.Value, new { @class = "provinces" })
@Html.RadioButtonFor(m => province.Key, province.Value)
}
<br/><br />
@Html.LabelFor(m => m.PostalCode, Resource.PostalCode)
@Html.TextBoxFor(m => m.PostalCode)
<br/><br />
@Html.Label(Resource.DesiredSeedingDate)
@Html.TextBoxFor(m => m.SeedingDate, new { @class="dateField", @readonly="true" } )
<br/><br />
@Html.Label(Resource.LatestHarvestDate)
@Html.TextBoxFor(m => m.HarvestDate, new { @class = "dateField", @readonly = "true" })
<br/><br />
@Html.Label(Resource.DesiredDryMatterPercentage)
@Html.TextBoxFor(m => m.DryMatterPercentage)
<br/><br/>
<input type="submit" value="@Resource.Continue" />
}
<br/>
正如您可能看到的,我的错误在代码中:
foreach (var province in Model.Provinces)
{
@Html.Label(province.Value, new { @class = "provinces" })
@Html.RadioButtonFor(m => province.Key, province.Value)
}
我在这里要做的是为我的ViewModel中的每个KeyValuePair创建一个标签和单选按钮。但我做错了,因为他们没有在控制器中收到。我做错了什么?
(我是asp.net mvc的新手,欢迎评论家和改进者)
在@ LeftyX的回复后添加了已编辑的代码
foreach (var province in Model.Provinces)
{
@Html.Label("Provinces_" + province.Key, province.Value, new { @class = "provinces" })
@Html.RadioButton("Province", province.Key, new { id = "Provinces_" + province.Key })
}
答案 0 :(得分:0)
尝试将属性Province
添加到您的viewmodel PreconditionsViewModel
:
public int Province { get; set; }
并在您的视图中更改单选按钮创建的代码:
foreach (var province in Model.Provinces)
{
@Html.Label("Provinces_" + province.Key, province.Value, new { @class = "provinces" })
@Html.RadioButton("Province", province.Key, new { id="Provinces_" + province.Key})
}
每个无线电控制将以这种方式呈现:
<input id="Provinces_1" name="Province" type="radio" value="1">
<input id="Provinces_2" name="Province" type="radio" value="2">
正如您所看到的,每个输入都有不同的id
但name
相同。
当您发布表单时,添加的属性Province
将绑定到所选字段。
您可以在zip文件here中尝试解决方案。