返回两个值的复选框

Checkbox returning two values

本文关键字:复选框 两个 返回      更新时间:2023-09-26

我目前正在使用javascript为复选框生成HTML,但当我将表单发布到接受FormCollection作为参数的控制器时。

然后,我将这些值放入字典中,并检查字典中的值。虽然其他复选框只返回一个值,但我的autoDiscovery复选框返回两个值,即'on''true',这对我来说没有意义

这是呈现的HTML

<div class="form-group">
    <div class="col-md-10">
        <label class="col-md-3 control-label" for="autoDiscovery">
            <input id="autoDiscovery" type="checkbox" checked="" data-val="false" name="autoDiscovery">
            <input type="hidden" name="autoDiscovery" value="true"> Auto Discovery
        </label>
    </div>
</div>

这是我用来分配复选框的javascript

function AssignCheckbox(variableName, jsonData, caption) {
var checked = jsonData == 1 ? 'checked' : '';
var value = jsonData == 1 ? 'true' : 'false';    
    return divFormGroupOpening + divOpeningInput +
            '<label class="col-md-3 control-label" for="' + variableName + '">' + '<input id="' + variableName + '" type="checkbox" name="' + variableName + '"  data-val="false"' + checked + '>' +
            '<input type="hidden" value="' + value + '" name="' + variableName + '">' +
            ' ' +  caption +'</label></div></div>';
        }

您有两个具有完全相同name属性的input。当然,你会期望两个值

<input id="' + variableName + '" name="' + variableName + '"  '>'
<input type="hidden" name="' + variableName + '">' 

检查使用@Html.CheckBoxFor()方法时生成的html。它生成

<input type="checkbox" name="autoDiscovery" value="true" ..... />
<input type="hidden" name="autoDiscovery" value="false" />

你需要模仿它。当前,您的checkbox元素没有value属性,因此如果在视图中选中它,它将返回"on"。您的隐藏输入值是"true",因此值也会发布。

同样重要的是,不要使用FormCollection。张贴回模型,或在方法中添加参数-bool autoDiscovery,以便DefaultModelBinder根据复选框的选中状态将值正确设置为truefalse