将表单数据传递回控制器

时间:2011-04-18 22:49:47

标签: asp.net-mvc model-view-controller asp.net-mvc-3

我遇到的问题是参数没有从表单数据中获取值。它在列表中显示正确的项目数(即,如果用户选择5个选项,列表包含5个项目),但所有值均为零。以下是我的HTML视图:

    @using (Html.BeginForm())
    {
       @Html.HiddenFor(s => s.SOWId)

        foreach (LabelTable.Domain.Entities.Option option in ViewBag.Options)
        {

        <div class="wizard-section" id=@option.Level>
        @Html.RadioButton("["+(option.Level-1)+"].OptionId", option.OptionId) @option.OptionName
        </div>
        }
        <div class="buttons">
        <input type="submit", value="Continue", class="button"/>
        </div>      
    }

这是我的控制器方法:

    [HttpPost]
    public ViewResult Wizard(StatementOfWork SOW, List<int> OptionIds)
    {
        //do something
    }

OptionIds在发布时包含以下内容: [0] = 0 [1] = 0 [2] = 0 等等...

我要做的是创建一个表单,向用户提供一些可供选择的选项(此表单是向导的一部分)。

有5个级别(或更多)选项。表单的所有数据都通过ViewBag.Options发送到视图。除了级别1之外,所有级别都被隐藏。在级别1上进行选择后,下一级别显示,依此类推。表单仅回发通过每个级别选择的选项。最初我用多个帖子回到服务器这样做但我不喜欢(对很多往返)

我计划将每个级别中选择的选项添加到SOW模型中,我将从视图传递到向导视图。

2 个答案:

答案 0 :(得分:2)

您的View代码有点令人困惑,但据我了解,您希望ModelBinder在发布时将您的radiobutton值绑定到OptionIds列表。在这种情况下,您的radiobuttons的名称应该是OptionIds[0]OptionIds[1]等。所以再次,我不确定Level属性是什么,但我想你想要这样的东西:

@Html.RadioButton("OptionIds["+(option.Level-1)+"]", option.OptionId)

答案 1 :(得分:0)

尝试更换:

  @Html.RadioButton("["+(option.Level-1)+"].OptionId", option.OptionId)

with:

  @Html.RadioButton("["+(option.Level-1)+"]", option.OptionId)