Radiobutton控件未发送到viewmodel

时间:2015-07-08 11:18:06

标签: c# asp.net-mvc-5 asp.net-mvc-viewmodel

我有一个视图,用户将使用单选按钮选择一个值。我的问题是,一旦用户单击提交,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 })    
}

1 个答案:

答案 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">

正如您所看到的,每个输入都有不同的idname相同。

当您发布表单时,添加的属性Province将绑定到所选字段。

您可以在zip文件here中尝试解决方案。