c# - 从复选框集合中返回一串选定值
问题描述
我正在构建一个 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 助手的工作吗?
解决方案
找不到在 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;
}
推荐阅读
- r - 如何修复 summarise_all() 中的错误“'x' 和 'w' 必须具有相同的长度”?
- intellij-idea - 复制和粘贴选定的文本
- python - 使用字典填充熊猫列中的 NaN
- php - 一次登录两张sql表
- javascript - 如何创建与 vue 路由器一起使用的子组件?
- ruby-on-rails - 从 chromedriver-helper 到 webdriver 的 Rails 更新显示 W3C 标准错误
- highcharts - 格式化 highcharts 日期工具提示以显示时区
- python - 如何在 Jupyter Notebook 中运行系统命令并获得连续输出?
- ios - 用避雷线连接midi
- javascript - Using window.open() "windowFeatures" parameter and trying to remove about:blank