复选框返回两个值

时间:2015-07-02 09:34:50

标签: javascript html html5 asp.net-mvc-5

我目前正在使用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>';
        }

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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

同样重要的是,不要使用FormCollection。回发到模型,或在方法中添加参数 - bool autoDiscovery,以便DefaultModelBinder将值正确地设置为truefalse,具体取决于检查的状态复选框