我目前正在使用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>';
}
答案 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
将值正确地设置为true
或false
,具体取决于检查的状态复选框