web-dev-qa-db-ja.com

コントローラMVC4でチェックボックスの値を取得する

チェックボックスリストからチェックボックスの値を取得しようとしていますが、成功しません。以下は、私が試したコードです。

モデル

 [DisplayName("Gender")]
    public IList<SelectListItem> Gender { get; set; }

コントローラ

 public ActionResult Index()
        {
            AssociateFormViewModel objStudentModel = new AssociateFormViewModel();

            List<SelectListItem> genderNames = new List<SelectListItem>();
            genderNames.Add(new SelectListItem { Text = "Male", Value = "1" });
            genderNames.Add(new SelectListItem { Text = "Female", Value = "2" });
            genderNames.Add(new SelectListItem { Text = "Prefer not to say", Value = "3" });

            objStudentModel.Gender = genderNames;
            return PartialView("AssociateApplicationForm", objStudentModel);

        }

[HttpPost]
        public ActionResult HandleFormSubmit(MembershipFormViewModel model)
        {
            //model not valid, do not save, but return current umbraco page
            if (ModelState.IsValid == false)
            {
                return CurrentUmbracoPage();
            }
 string test = "Gender: " + model.Gender + Environment.NewLine; //getting null here
 return RedirectToCurrentUmbracoPage();
}

見る

@foreach (var names in @Model.Gender)
                {
                var checkBoxId = "chk" + names.Value;
                var tdId = "td" + names.Value;
                    <table width="100%">
                        <tr >
                            <td width="20px">
                                <input type="checkbox" id="@checkBoxId" class="chkclass" value="@names.Value" />
                            </td>
                            <td id="@tdId"  width="100px">
                                @names.Text
                            </td>
                        </tr>
                    </table>

}

選択したチェックボックスの値が間違っている場合は、投稿アクションでnullになります。また、ユーザーが1つのチェックボックスのみを選択するように制限するにはどうすればよいですか。

どんな助けや提案も歓迎されます。ありがとう

4
Mr A

チェックボックスに名前を割り当てます。

<input name="gender" type="checkbox" id="@checkBoxId" class="chkclass" value="@names.Value" />

次に、パラメータ名がgenderの文字列配列を受け入れます

[HttpPost]
        public ActionResult HandleFormSubmit(string[] gender,
             MembershipFormViewModel model)
        {
            //model not valid, do not save, but return current umbraco page
            if (ModelState.IsValid == false)
            {
                return CurrentUmbracoPage();
            }
            string test = "Gender: " + model.Gender + Environment.NewLine; //getting null here
            return RedirectToCurrentUmbracoPage();
        }
10
WannaCSharp

あなたのコードに従ってmodel.Genderは、チェックボックスを作成するためのリストです。選択したチェックボックスの値を取得するには、モデルに次のような新しいプロパティを追加する必要があります。

public string SelectedGender { get; set; }

チェックボックスの作成中に、チェックボックスに新しいプロパティ名、つまりSelectedGenderという名前を付けます。

<input type="checkbox" id="SelectedGender1" name="SelectedGender" class="chkclass" value="@names.Value" />

これがお役に立てば幸いです。

1
somesh