从复选框集合中返回一串选定值

Posted

技术标签:

【中文标题】从复选框集合中返回一串选定值【英文标题】:Returning a string of selected values from a checkbox collection 【发布时间】:2019-08-26 19:43:12 【问题描述】:

我正在构建一个 C# MVC 视图,其中包含一个带有一系列 4 个复选框的字段。我可以用值填充列表并很好地返回单个值,因此表单的基础知识似乎可以工作。以下是视图中选项的填充方式:

@for (int i = 0; i < Model.QuesOptions.Count; i++)

    <div>
        @html.HiddenFor(x => x.QuesOptions[i].Name)
        @Html.CheckBoxFor(x => x.QuesOptions[i].Checked)
        @Html.LabelFor(x => x.QuesOptions[i].Checked, Model.QuesOptions[i].Name)
    </div>

最终目标是返回发布时检查的每个项目的值的单个值列表(理想情况下以逗号分隔)。因此,当用户在表单上单击“提交”时,如果视图模型上的单个字段(称为“UserAnswer”)将填充逗号分隔的字符串,那就太好了。这甚至可以在视图模型上实现吗?

我曾希望,可能是空洞的希望,这种变化会起作用:

@Html.HiddenFor(model => model.Ques.UserAnswer, 
    new  Value = Model.QuesOptions.Where(x=>x.Checked).Select(x=>x.Name) )

或者这对于某种扩展方法或 HTML 助手来说是一项工作?

【问题讨论】:

您展示的示例有什么问题?你有错误吗? @RufusL - 不幸的是,它没有返回错误,只是什么也没返回。我认为这些字段都返回为空。 @RufusL 实际上,它只返回一个内部引用:“System.Linq.Enumerable+WhereSelectListIterator`2[Survey.Models.Question2ViewModel,System.String]” 您可以使用一个简单的 javascript 函数来完成此操作,该函数遍历您的复选框以构建一个逗号分隔的字符串,然后在您的 html 表单中设置隐藏字段的值。如果您在提交时执行此操作,它应该会执行您想要完成的操作。 我希望避免使用 JavaScript 并且只在 Razor 中完成所有工作,但是经过太多的搜索和摆弄,JS 似乎是最好的选择。所以这就是我所做的。 【参考方案1】:

找不到在 Razor 本身中处理逗号分隔字符串的方法(可能存在一种方法,但我还没有找到),我选择了 JavaScript。以下代码将逗号分隔的列表插入到视图模型的隐藏字段中:

    function submitForm() 
    var question2 = "";
    for (i = 0; i <= 3; i++) 
        var trueOrNo = document.getElementById('Quez2Options_' + i + '__Checked').checked;
        if (trueOrNo) 
            question2 += document.querySelector('label[for="Quez2Options_' + i + '__Checked"]').innerHTML + ",";
        
    
    document.getElementById('Quez2_UserAnswer').value = question2.substring(0, question2.length - 1);

    var val3a = document.getElementById('Quez3a').value;
    var val3b = document.getElementById('Quez3b').value;
    var val3c = document.getElementById('Quez3c').value;
    var question3 = val3a + "," + val3b + "," + val3c;
    document.getElementById('Quez3_UserAnswer').value = question3;

【讨论】:

以上是关于从复选框集合中返回一串选定值的主要内容,如果未能解决你的问题,请参考以下文章

如何从黑莓10级联中的复选框选定项目中获取值..?

如何从复选框数组中获取选定的复选框

如何从dataTable行集合中获取复选框输入值?

在jQuery中获取所有选定复选框值的最佳方法[重复]

在回收站视图中滚动时,它向选定的复选框列表添加了一些其他值

什么是 jQuery,我可以在弹出窗口中显示选定复选框、下拉列表和翻转开关的文本值