0

両方のチェックボックスをオンにすると、「1」が表示されます。最初のチェックボックスをオンにすると、「1」が表示されます。2番目のチェックボックスだけをチェックすると、「false」になります。何故ですか?また、他のチェックボックスにその値を投稿させるにはどうすればよいですか (またはまったく)? 以下のコードと結果の 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" />
4

1 に答える 1

0
  1. 複数の入力要素が同じ を共有している場合name、最初の 1 つだけがポストされます。
  2. チェックボックスがチェックされていない場合、何も投稿されません。

したがって、最初のチェックボックスをオンにすると、「1」が得られます。それ以降はすべて無視されます。最初のチェックボックスがない場合、非表示フィールドは「false」を投稿します。それ以降はすべて無視されます。

隠しフィールドがどこから来るのか疑問に思っている場合、MVC ヘルパーは、false上記の #2 により、同じ名前と値を持つ隠しフィールドを作成します。チェックボックスはブール値を表すと想定されているため、value/(nothing) ではなく、常に true/false を投稿したいと考えていました。

于 2012-07-09T21:09:37.777 に答える