5

I am trying to retrieve the checked checkbox value from a checkbox list without any success , below is the code which i have tried:

Model

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

Controller

 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();
}

View

@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>

}

Any ideas where i am getting it wrong the selected checkbox value is coming null in the post action, Also how can i limit the user to select only one check box,

Any help or suggestion will be appreciated . Thanks

2 Answers 2

11

assign a name to your checkbox:

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

Then accept a string array of with parameter name 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();
        }
Sign up to request clarification or add additional context in comments.

5 Comments

No, i meant gender. the name html attribute serve as the key to the valus posted to the controller. Your model.Gender is a List
still getting nothing :(
the values is in your string[] gender parameter. not in your model
but this will give me number of selected checkbox , i want to limit user to select only one
Then use a radio button instead. Checkbox is meant for multiple selections.
2

As per your code model.Gender is a list just for creating checkboxes. For getting selected checkbox value, you should add a new property in you model like

public string SelectedGender { get; set; }

and while creating checkboxes name the checkboxes as new propertyname i.e. SelectedGender

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

Hope this will help you.

1 Comment

Are you checking the value of model.SelectedGender in Controller

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.