当我选中两个复选框时,我得到“1”。当我检查第一个复选框时,我得到“1”。当我只检查第二个复选框时,我得到“假”。这是为什么?而且,我如何让另一个复选框发布其值(或根本)?下面的代码和结果HTML。
@model InspectionWebFormsMVC.ViewModels.CtrlInputDataModel
@{
var ddv = new SelectList(Model.RowCtrl.DefaultValues, "Value", "Label");
switch (Model.RowCtrl.Type)
{
case "checkbox":
foreach (var sli in ddv)
{
@Html.LabelFor(blah => blah.InputtedData, sli.Text)
bool isChecked = false;
string attrChecked = "checked";
if (Model.InputtedData == sli.Value){
isChecked = true;
@Html.CheckBox("InputtedData", isChecked, new { @value = sli.Value, @checked = attrChecked })
}
else {
isChecked = false;
@Html.CheckBox("InputtedData", isChecked, new { @value = sli.Value })
}
}
@Html.HiddenFor(blah => blah.InputtedDataID)
@Html.HiddenFor(blah => blah.RowCtrl.CtrlTypeID)
<br />
break;
}
}
结果HTML:
<label for="sectionRows_a7d91de2-c828-4cd4-979d-783caf85ae3b__RowInput_0__InputtedData">Red</label>
<input id="sectionRows_a7d91de2-c828-4cd4-979d-783caf85ae3b__RowInput_0__InputtedData"
name="sectionRows[a7d91de2-c828-4cd4-979d-783caf85ae3b].RowInput[0].InputtedData"
type="checkbox"
value="1" />
<input name="sectionRows[a7d91de2-c828-4cd4-979d-783caf85ae3b].RowInput[0].InputtedData"
type="hidden"
value="false" />
<label for="sectionRows_a7d91de2-c828-4cd4-979d-783caf85ae3b__RowInput_0__InputtedData">Super</label>
<input checked="checked"
id="sectionRows_a7d91de2-c828-4cd4-979d-783caf85ae3b__RowInput_0__InputtedData"
name="sectionRows[a7d91de2-c828-4cd4-979d-783caf85ae3b].RowInput[0].InputtedData"
type="checkbox"
value="2" />
<input name="sectionRows[a7d91de2-c828-4cd4-979d-783caf85ae3b].RowInput[0].InputtedData"
type="hidden"
value="false" />
<input data-val="true"
data-val-number="The field InputtedDataID must be a number."
data-val-required="The InputtedDataID field is required."
id="sectionRows_a7d91de2-c828-4cd4-979d-783caf85ae3b__RowInput_0__InputtedDataID"
name="sectionRows[a7d91de2-c828-4cd4-979d-783caf85ae3b].RowInput[0].InputtedDataID"
type="hidden"
value="5" />
<input data-val="true"
data-val-number="The field CtrlTypeID must be a number."
data-val-required="The CtrlTypeID field is required."
id="sectionRows_a7d91de2-c828-4cd4-979d-783caf85ae3b__RowInput_0__RowCtrl_CtrlTypeID"
name="sectionRows[a7d91de2-c828-4cd4-979d-783caf85ae3b].RowInput[0].RowCtrl.CtrlTypeID"
type="hidden"
value="5" />
答案 0 :(得分:0)
name
时,只会发布第一个输入元素。因此,当您选中第一个复选框时,您将获得“1”。之后的一切都被忽略了。 当您没有第一个复选框时,隐藏字段会发布“false”。之后的一切都被忽略了。
如果您想知道隐藏字段的来源,MVC助手会创建一个名为false
的隐藏字段,因为上面的#2。复选框应该代表布尔值,因此他们希望始终发布true / false,而不是值/(无)。