ASP.NET MVC - Checkbox list not returning all comma separated values












0















I have the following checkbox list:



<input type="checkbox" name="Categories" value="1" />
<input type="checkbox" name="Categories" value="2" />


My model is as follows:



public class MyModel
{
public string Categories { get; set; }

}


My controller:



 public ActionResult Index(MyModel model)
{
if (ModelState.IsValid)
{

// Save data to database, and redirect to Success page.

return RedirectToAction("Success");
}

}


Selecting both checkboxes saves only one value?










share|improve this question



























    0















    I have the following checkbox list:



    <input type="checkbox" name="Categories" value="1" />
    <input type="checkbox" name="Categories" value="2" />


    My model is as follows:



    public class MyModel
    {
    public string Categories { get; set; }

    }


    My controller:



     public ActionResult Index(MyModel model)
    {
    if (ModelState.IsValid)
    {

    // Save data to database, and redirect to Success page.

    return RedirectToAction("Success");
    }

    }


    Selecting both checkboxes saves only one value?










    share|improve this question

























      0












      0








      0








      I have the following checkbox list:



      <input type="checkbox" name="Categories" value="1" />
      <input type="checkbox" name="Categories" value="2" />


      My model is as follows:



      public class MyModel
      {
      public string Categories { get; set; }

      }


      My controller:



       public ActionResult Index(MyModel model)
      {
      if (ModelState.IsValid)
      {

      // Save data to database, and redirect to Success page.

      return RedirectToAction("Success");
      }

      }


      Selecting both checkboxes saves only one value?










      share|improve this question














      I have the following checkbox list:



      <input type="checkbox" name="Categories" value="1" />
      <input type="checkbox" name="Categories" value="2" />


      My model is as follows:



      public class MyModel
      {
      public string Categories { get; set; }

      }


      My controller:



       public ActionResult Index(MyModel model)
      {
      if (ModelState.IsValid)
      {

      // Save data to database, and redirect to Success page.

      return RedirectToAction("Success");
      }

      }


      Selecting both checkboxes saves only one value?







      asp.net-mvc checkboxlist






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 '18 at 13:00









      adam78adam78

      2,82073686




      2,82073686
























          2 Answers
          2






          active

          oldest

          votes


















          0














          The main problem is string property stores single string, you should use collection property to bind with checkboxes e.g. List<string> as @Ajay mentioned before.



          Therefore, you should use this setup:



          Model



          public class MyModel
          {
          public MyModel()
          {
          SelectedCategories = new List<string>();

          // put categories here
          Categories = new List<SelectListItem>() { ... };
          }

          // other properties

          public List<string> SelectedCategories { get; set; }
          public List<SelectListItem> Categories { get; set; }
          }


          View



          @foreach (var item in Model.Categories)
          {
          <input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
          }


          Controller



          [HttpPost]
          public ActionResult Index(MyModel model)
          {
          if (ModelState.IsValid)
          {
          // create comma-separated values
          var selectedCategories = string.Join(",", model.SelectedCategories);

          // Save data to database, and redirect to Success page.

          return RedirectToAction("Success");
          }
          }


          If you want to use CheckBoxFor helper, use SelectListItem which has Selected property with bool type, because CheckBoxFor binds for bool property:



          Model



          public class MyModel
          {
          public MyModel()
          {
          // put categories here
          Categories = new List<SelectListItem>() { ... };
          }

          // other properties
          public List<SelectListItem> Categories { get; set; }
          }


          View



          @for (var i = 0; i < Model.Categories.Count; i++)
          {
          @Html.CheckBoxFor(model => model.Categories[i].Selected)
          @Html.HiddenFor(model => model.Categories[i].Text)
          @Html.HiddenFor(model => model.Categories[i].Value)
          }


          Controller



          [HttpPost]
          public ActionResult Index(MyModel model)
          {
          if (ModelState.IsValid)
          {
          string selectedCategories = string.Join(",",
          model.Categories.Where(x => x.Selected == true)
          .Select(x => x.Text).ToList());

          // Save data to database, and redirect to Success page.

          return RedirectToAction("Success");
          }
          }


          Note:



          There is a custom helper named CheckBoxListFor which should be considered to create checkbox list from List<T> property.



          An example of the checkbox list implementation can be seen here.



          Related problems:



          Get comma-separated string from CheckboxList HTML Helper



          Get Multiple Selected checkboxes in MVC






          share|improve this answer































            1














            You can't get comma separated value directly to server, I suggest to change class as below



            public class MyModel
            {
            public List<string> Categories { get; set; }

            }


            You get list of values which checkbox selected.



            If you want comma separated value then on client side need when submit form create function and need to save on hidden variable.



            May this help you



            Thanks






            share|improve this answer
























            • or do string.join(",", model.Categories)

              – adam78
              Nov 22 '18 at 14:26











            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431617%2fasp-net-mvc-checkbox-list-not-returning-all-comma-separated-values%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            The main problem is string property stores single string, you should use collection property to bind with checkboxes e.g. List<string> as @Ajay mentioned before.



            Therefore, you should use this setup:



            Model



            public class MyModel
            {
            public MyModel()
            {
            SelectedCategories = new List<string>();

            // put categories here
            Categories = new List<SelectListItem>() { ... };
            }

            // other properties

            public List<string> SelectedCategories { get; set; }
            public List<SelectListItem> Categories { get; set; }
            }


            View



            @foreach (var item in Model.Categories)
            {
            <input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
            }


            Controller



            [HttpPost]
            public ActionResult Index(MyModel model)
            {
            if (ModelState.IsValid)
            {
            // create comma-separated values
            var selectedCategories = string.Join(",", model.SelectedCategories);

            // Save data to database, and redirect to Success page.

            return RedirectToAction("Success");
            }
            }


            If you want to use CheckBoxFor helper, use SelectListItem which has Selected property with bool type, because CheckBoxFor binds for bool property:



            Model



            public class MyModel
            {
            public MyModel()
            {
            // put categories here
            Categories = new List<SelectListItem>() { ... };
            }

            // other properties
            public List<SelectListItem> Categories { get; set; }
            }


            View



            @for (var i = 0; i < Model.Categories.Count; i++)
            {
            @Html.CheckBoxFor(model => model.Categories[i].Selected)
            @Html.HiddenFor(model => model.Categories[i].Text)
            @Html.HiddenFor(model => model.Categories[i].Value)
            }


            Controller



            [HttpPost]
            public ActionResult Index(MyModel model)
            {
            if (ModelState.IsValid)
            {
            string selectedCategories = string.Join(",",
            model.Categories.Where(x => x.Selected == true)
            .Select(x => x.Text).ToList());

            // Save data to database, and redirect to Success page.

            return RedirectToAction("Success");
            }
            }


            Note:



            There is a custom helper named CheckBoxListFor which should be considered to create checkbox list from List<T> property.



            An example of the checkbox list implementation can be seen here.



            Related problems:



            Get comma-separated string from CheckboxList HTML Helper



            Get Multiple Selected checkboxes in MVC






            share|improve this answer




























              0














              The main problem is string property stores single string, you should use collection property to bind with checkboxes e.g. List<string> as @Ajay mentioned before.



              Therefore, you should use this setup:



              Model



              public class MyModel
              {
              public MyModel()
              {
              SelectedCategories = new List<string>();

              // put categories here
              Categories = new List<SelectListItem>() { ... };
              }

              // other properties

              public List<string> SelectedCategories { get; set; }
              public List<SelectListItem> Categories { get; set; }
              }


              View



              @foreach (var item in Model.Categories)
              {
              <input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
              }


              Controller



              [HttpPost]
              public ActionResult Index(MyModel model)
              {
              if (ModelState.IsValid)
              {
              // create comma-separated values
              var selectedCategories = string.Join(",", model.SelectedCategories);

              // Save data to database, and redirect to Success page.

              return RedirectToAction("Success");
              }
              }


              If you want to use CheckBoxFor helper, use SelectListItem which has Selected property with bool type, because CheckBoxFor binds for bool property:



              Model



              public class MyModel
              {
              public MyModel()
              {
              // put categories here
              Categories = new List<SelectListItem>() { ... };
              }

              // other properties
              public List<SelectListItem> Categories { get; set; }
              }


              View



              @for (var i = 0; i < Model.Categories.Count; i++)
              {
              @Html.CheckBoxFor(model => model.Categories[i].Selected)
              @Html.HiddenFor(model => model.Categories[i].Text)
              @Html.HiddenFor(model => model.Categories[i].Value)
              }


              Controller



              [HttpPost]
              public ActionResult Index(MyModel model)
              {
              if (ModelState.IsValid)
              {
              string selectedCategories = string.Join(",",
              model.Categories.Where(x => x.Selected == true)
              .Select(x => x.Text).ToList());

              // Save data to database, and redirect to Success page.

              return RedirectToAction("Success");
              }
              }


              Note:



              There is a custom helper named CheckBoxListFor which should be considered to create checkbox list from List<T> property.



              An example of the checkbox list implementation can be seen here.



              Related problems:



              Get comma-separated string from CheckboxList HTML Helper



              Get Multiple Selected checkboxes in MVC






              share|improve this answer


























                0












                0








                0







                The main problem is string property stores single string, you should use collection property to bind with checkboxes e.g. List<string> as @Ajay mentioned before.



                Therefore, you should use this setup:



                Model



                public class MyModel
                {
                public MyModel()
                {
                SelectedCategories = new List<string>();

                // put categories here
                Categories = new List<SelectListItem>() { ... };
                }

                // other properties

                public List<string> SelectedCategories { get; set; }
                public List<SelectListItem> Categories { get; set; }
                }


                View



                @foreach (var item in Model.Categories)
                {
                <input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
                }


                Controller



                [HttpPost]
                public ActionResult Index(MyModel model)
                {
                if (ModelState.IsValid)
                {
                // create comma-separated values
                var selectedCategories = string.Join(",", model.SelectedCategories);

                // Save data to database, and redirect to Success page.

                return RedirectToAction("Success");
                }
                }


                If you want to use CheckBoxFor helper, use SelectListItem which has Selected property with bool type, because CheckBoxFor binds for bool property:



                Model



                public class MyModel
                {
                public MyModel()
                {
                // put categories here
                Categories = new List<SelectListItem>() { ... };
                }

                // other properties
                public List<SelectListItem> Categories { get; set; }
                }


                View



                @for (var i = 0; i < Model.Categories.Count; i++)
                {
                @Html.CheckBoxFor(model => model.Categories[i].Selected)
                @Html.HiddenFor(model => model.Categories[i].Text)
                @Html.HiddenFor(model => model.Categories[i].Value)
                }


                Controller



                [HttpPost]
                public ActionResult Index(MyModel model)
                {
                if (ModelState.IsValid)
                {
                string selectedCategories = string.Join(",",
                model.Categories.Where(x => x.Selected == true)
                .Select(x => x.Text).ToList());

                // Save data to database, and redirect to Success page.

                return RedirectToAction("Success");
                }
                }


                Note:



                There is a custom helper named CheckBoxListFor which should be considered to create checkbox list from List<T> property.



                An example of the checkbox list implementation can be seen here.



                Related problems:



                Get comma-separated string from CheckboxList HTML Helper



                Get Multiple Selected checkboxes in MVC






                share|improve this answer













                The main problem is string property stores single string, you should use collection property to bind with checkboxes e.g. List<string> as @Ajay mentioned before.



                Therefore, you should use this setup:



                Model



                public class MyModel
                {
                public MyModel()
                {
                SelectedCategories = new List<string>();

                // put categories here
                Categories = new List<SelectListItem>() { ... };
                }

                // other properties

                public List<string> SelectedCategories { get; set; }
                public List<SelectListItem> Categories { get; set; }
                }


                View



                @foreach (var item in Model.Categories)
                {
                <input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
                }


                Controller



                [HttpPost]
                public ActionResult Index(MyModel model)
                {
                if (ModelState.IsValid)
                {
                // create comma-separated values
                var selectedCategories = string.Join(",", model.SelectedCategories);

                // Save data to database, and redirect to Success page.

                return RedirectToAction("Success");
                }
                }


                If you want to use CheckBoxFor helper, use SelectListItem which has Selected property with bool type, because CheckBoxFor binds for bool property:



                Model



                public class MyModel
                {
                public MyModel()
                {
                // put categories here
                Categories = new List<SelectListItem>() { ... };
                }

                // other properties
                public List<SelectListItem> Categories { get; set; }
                }


                View



                @for (var i = 0; i < Model.Categories.Count; i++)
                {
                @Html.CheckBoxFor(model => model.Categories[i].Selected)
                @Html.HiddenFor(model => model.Categories[i].Text)
                @Html.HiddenFor(model => model.Categories[i].Value)
                }


                Controller



                [HttpPost]
                public ActionResult Index(MyModel model)
                {
                if (ModelState.IsValid)
                {
                string selectedCategories = string.Join(",",
                model.Categories.Where(x => x.Selected == true)
                .Select(x => x.Text).ToList());

                // Save data to database, and redirect to Success page.

                return RedirectToAction("Success");
                }
                }


                Note:



                There is a custom helper named CheckBoxListFor which should be considered to create checkbox list from List<T> property.



                An example of the checkbox list implementation can be seen here.



                Related problems:



                Get comma-separated string from CheckboxList HTML Helper



                Get Multiple Selected checkboxes in MVC







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 23 '18 at 2:12









                Tetsuya YamamotoTetsuya Yamamoto

                17k42342




                17k42342

























                    1














                    You can't get comma separated value directly to server, I suggest to change class as below



                    public class MyModel
                    {
                    public List<string> Categories { get; set; }

                    }


                    You get list of values which checkbox selected.



                    If you want comma separated value then on client side need when submit form create function and need to save on hidden variable.



                    May this help you



                    Thanks






                    share|improve this answer
























                    • or do string.join(",", model.Categories)

                      – adam78
                      Nov 22 '18 at 14:26
















                    1














                    You can't get comma separated value directly to server, I suggest to change class as below



                    public class MyModel
                    {
                    public List<string> Categories { get; set; }

                    }


                    You get list of values which checkbox selected.



                    If you want comma separated value then on client side need when submit form create function and need to save on hidden variable.



                    May this help you



                    Thanks






                    share|improve this answer
























                    • or do string.join(",", model.Categories)

                      – adam78
                      Nov 22 '18 at 14:26














                    1












                    1








                    1







                    You can't get comma separated value directly to server, I suggest to change class as below



                    public class MyModel
                    {
                    public List<string> Categories { get; set; }

                    }


                    You get list of values which checkbox selected.



                    If you want comma separated value then on client side need when submit form create function and need to save on hidden variable.



                    May this help you



                    Thanks






                    share|improve this answer













                    You can't get comma separated value directly to server, I suggest to change class as below



                    public class MyModel
                    {
                    public List<string> Categories { get; set; }

                    }


                    You get list of values which checkbox selected.



                    If you want comma separated value then on client side need when submit form create function and need to save on hidden variable.



                    May this help you



                    Thanks







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Nov 22 '18 at 13:28









                    AjayAjay

                    662




                    662













                    • or do string.join(",", model.Categories)

                      – adam78
                      Nov 22 '18 at 14:26



















                    • or do string.join(",", model.Categories)

                      – adam78
                      Nov 22 '18 at 14:26

















                    or do string.join(",", model.Categories)

                    – adam78
                    Nov 22 '18 at 14:26





                    or do string.join(",", model.Categories)

                    – adam78
                    Nov 22 '18 at 14:26


















                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431617%2fasp-net-mvc-checkbox-list-not-returning-all-comma-separated-values%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Tangent Lines Diagram Along Smooth Curve

                    Yusuf al-Mu'taman ibn Hud

                    Zucchini