无法将ViewModel中的属性与表单元素绑定

时间:2013-02-21 01:51:28

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

我的表格如下:

enter image description here

您看到的填充列表可能会有所不同,具体取决于用户在上一个屏幕中选择的“胶囊大小”。换句话说,如果用户在前一个屏幕中选择“Capsule 0”并单击“提交”,则此屏幕将显示该胶囊的填充列表。这一切都很完美。我需要做的是捕获在此表单上选择的填充物。当用户在此表单上单击“创建”时,代码将调用“进程”控制器中的“GetResults”方法:

public ActionResult GetResults(ProcessViewModel vm)
{
    List<Results> results = context.GetResults();
    return View(results);
}

这就是我在这个特定View上运行的ViewModel:

public class ProcessViewModel
{
    public audit_session AuditSession { get; set; }

    public int NumberOfCapsules { get; set; }

    public int CapsuleFK { get; set; }

    public audit_ingredient_active Active1 { get; set; }
    public audit_ingredient_active Active2 { get; set; }
    public audit_ingredient_active Active3 { get; set; }
    public audit_ingredient_active Active4 { get; set; }
    public audit_ingredient_active Active5 { get; set; }
    public audit_ingredient_active KeyActive { get; set; }

    public audit_ingredient_filler Filler { get; set; }

    public bool E4M { get; set; }
    public bool K100M { get; set; }

    public List<filler> Fillers { get; set; }
}

我希望能够捕获所选的填充符并以某种方式将其绑定到我的ViewModel中的Filler。我怎样才能做到这一点?其他所有内容都正确绑定(E4M,K100M以及您无法看到的表单上的所有其他字段)。

以下是我的填充列表的标记 - 我怀疑这里存在问题,因为我对此标记没有100%的信心

    <label>Choose Filler:</label><br />
    <fieldset data-role="controlgroup">
        @foreach (var i in Model.Fillers)
        {
            @Html.RadioButtonFor(x => x.Filler, "false", new { name = "radio-choice", id = i.pk });
            <label for="@i.pk">@i.name</label>
        }
    </fieldset>

1 个答案:

答案 0 :(得分:0)

因为您要覆盖单选按钮名称,所以您可以尝试手动绑定Filler属性,而不是依赖于默认的模型绑定器。

您可能需要在控制器签名中添加额外的string radio_choice参数(或使用Request.Form["radio-choice"]直接捕获它),并将它们分配给Filler的{​​{1}}属性}。