【问题标题】:Passing form data back to a controller将表单数据传回控制器
【发布时间】:2011-04-18 22:49:46
【问题描述】:

我遇到了一个参数没有从表单数据中获取值的问题。它在列表中显示正确的项目数(即,如果用户选择 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 模型中。

【问题讨论】:

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


    【解决方案1】:

    您的视图代码有点混乱,但据我了解,您希望 ModelBinder 在发布时将您的单选按钮值绑定到 OptionIds 列表。在这种情况下,您的单选按钮的名称应该是 OptionIds[0]OptionIds[1] 等。再说一次,我不确定 Level 属性是什么,但我假设您想要这样的东西:

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

    【讨论】:

    • 你是对的。不知道我在想什么。不能遍历像这样的索引 "[0]OptionIds" Doh!就像这样“OptionIds[0]”
    【解决方案2】:

    尝试替换:

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

    与:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2019-01-06
      • 1970-01-01
      相关资源
      最近更新 更多