【问题标题】:Getting values of check-box from formcollection in asp.net mvc从asp.net mvc中的formcollection获取复选框的值
【发布时间】:2013-07-09 09:17:02
【问题描述】:

我在这里查看了一些主题,但我仍然无法从复选框中获取值。

部分模型:

public Dictionary<Language, bool> TargetLanguages { get; set; }

部分视图:

    <div class="editor-label">
        <label for="TargetLanguages">select target languages</label>
    </div>
    <div class="editor-field">
        <form>
            @foreach (var item in Model.TargetLanguages)
            {                    
                @Html.CheckBox("TargetLanguages["+item.Key.Name+"]", item.Value)
                @item.Key.Name
            }
        </form>
    </div>

控制器部分:

    [HttpPost, ActionName("AddDictionary")]
    public ActionResult AddDictionary(FormCollection collection)
    {
     ...
    }

问题是我的 FormCollection 中没有任何 TargetLanguages 的踪迹。我试过 CheckBoxFor 但没有帮助。我也试过手动写复选框。

已编辑:好的,我刚刚注意到问题出在哪里。我的标记搞砸了,这就是我无法从 FormCollection 获取数据的原因。

【问题讨论】:

    标签: asp.net asp.net-mvc-4 razor checkbox formcollection


    【解决方案1】:

    创建所有具有相同名称的复选框。在这个示例中,我使用的是“SelectedTargetLanguages”。

    @using (Html.BeginForm())
    {
        foreach (var item in Model.TargetLanguages)
        {
            <label>
                @Html.CheckBoxFor(m => m.SelectedTargetLanguages, item.value)
                @item.KeyName
            </label>
        }
        <br/>
        @Html.SubmitButton("Actualizar listado")
    }
    

    然后,在您的操作中,参数必须是这样的字符串数组:

    public ActionResult AddDictionary(string[] selectedTargetLanguages)
    

    请注意,参数的名称与复选框的名称相同。 (它甚至可以使用不同的外壳)。

    您应该使用这样的显式参数,而不是通用的FormCollection。无论如何,如果您使用 FormCollection,您还应该收到该数组。

    【讨论】:

      【解决方案2】:

      我之前问过同样类型的问题。请检查以下链接

      MVC3 @Html.RadioButtonfor Pass data from view to controller

      MVC3 @html.radiobuttonfor

      我认为这可能会对您有所帮助。

      【讨论】:

      • 会检查一下;] 谢谢
      猜你喜欢
      • 1970-01-01
      • 2012-02-19
      • 2015-05-13
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多