How do I show multiple fields in a ViewBag drop down list for asp-items in asp.net-mvc-core





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















Model



 public partial class Official
{
public short OfficialNo { get; set; }
public string Surname { get; set; }
public string Firstname { get; set; }
}


I have 2 partial answers but neither gives me what I want:



In my controller on Edit:



ViewBag.OfficialNo = new SelectList(_context.Official, "OfficialNo", "OfficialNo", "", "Surname");
This gives me



    Smith
111
Brown
102
Gray
103


The top line is bold and comes from "Surname" which is supposed to be the Data Group Field. The bottom line is what is stored in the database and displays a value if there is one (which is correct).



Alternatively



ViewBag.OfficialNo = new SelectList(_context.Official.Select(e => e.OfficialNo + " - " + e.Firstname + " " + e.Surname));



This gives me



    101 – John Smith
102 – Bob Brown
103 – Garry Gray


which is the info I want but does not allow a selection to be stored (naturally).



I want



    John Smith
111
Bob Brown
102
Garry Gray
103


so that the first line is info and the second line (if selected) will be what is stored on update.



How do I combine the 2 ViewBag statements above ?



For further info my Edit View statement is:



<div class="form-group">
<label asp-for="RefereeNo" class="control-label"></label>
<select asp-for="RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
</div>









share|improve this question





























    0















    Model



     public partial class Official
    {
    public short OfficialNo { get; set; }
    public string Surname { get; set; }
    public string Firstname { get; set; }
    }


    I have 2 partial answers but neither gives me what I want:



    In my controller on Edit:



    ViewBag.OfficialNo = new SelectList(_context.Official, "OfficialNo", "OfficialNo", "", "Surname");
    This gives me



        Smith
    111
    Brown
    102
    Gray
    103


    The top line is bold and comes from "Surname" which is supposed to be the Data Group Field. The bottom line is what is stored in the database and displays a value if there is one (which is correct).



    Alternatively



    ViewBag.OfficialNo = new SelectList(_context.Official.Select(e => e.OfficialNo + " - " + e.Firstname + " " + e.Surname));



    This gives me



        101 – John Smith
    102 – Bob Brown
    103 – Garry Gray


    which is the info I want but does not allow a selection to be stored (naturally).



    I want



        John Smith
    111
    Bob Brown
    102
    Garry Gray
    103


    so that the first line is info and the second line (if selected) will be what is stored on update.



    How do I combine the 2 ViewBag statements above ?



    For further info my Edit View statement is:



    <div class="form-group">
    <label asp-for="RefereeNo" class="control-label"></label>
    <select asp-for="RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
    </div>









    share|improve this question

























      0












      0








      0








      Model



       public partial class Official
      {
      public short OfficialNo { get; set; }
      public string Surname { get; set; }
      public string Firstname { get; set; }
      }


      I have 2 partial answers but neither gives me what I want:



      In my controller on Edit:



      ViewBag.OfficialNo = new SelectList(_context.Official, "OfficialNo", "OfficialNo", "", "Surname");
      This gives me



          Smith
      111
      Brown
      102
      Gray
      103


      The top line is bold and comes from "Surname" which is supposed to be the Data Group Field. The bottom line is what is stored in the database and displays a value if there is one (which is correct).



      Alternatively



      ViewBag.OfficialNo = new SelectList(_context.Official.Select(e => e.OfficialNo + " - " + e.Firstname + " " + e.Surname));



      This gives me



          101 – John Smith
      102 – Bob Brown
      103 – Garry Gray


      which is the info I want but does not allow a selection to be stored (naturally).



      I want



          John Smith
      111
      Bob Brown
      102
      Garry Gray
      103


      so that the first line is info and the second line (if selected) will be what is stored on update.



      How do I combine the 2 ViewBag statements above ?



      For further info my Edit View statement is:



      <div class="form-group">
      <label asp-for="RefereeNo" class="control-label"></label>
      <select asp-for="RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
      </div>









      share|improve this question














      Model



       public partial class Official
      {
      public short OfficialNo { get; set; }
      public string Surname { get; set; }
      public string Firstname { get; set; }
      }


      I have 2 partial answers but neither gives me what I want:



      In my controller on Edit:



      ViewBag.OfficialNo = new SelectList(_context.Official, "OfficialNo", "OfficialNo", "", "Surname");
      This gives me



          Smith
      111
      Brown
      102
      Gray
      103


      The top line is bold and comes from "Surname" which is supposed to be the Data Group Field. The bottom line is what is stored in the database and displays a value if there is one (which is correct).



      Alternatively



      ViewBag.OfficialNo = new SelectList(_context.Official.Select(e => e.OfficialNo + " - " + e.Firstname + " " + e.Surname));



      This gives me



          101 – John Smith
      102 – Bob Brown
      103 – Garry Gray


      which is the info I want but does not allow a selection to be stored (naturally).



      I want



          John Smith
      111
      Bob Brown
      102
      Garry Gray
      103


      so that the first line is info and the second line (if selected) will be what is stored on update.



      How do I combine the 2 ViewBag statements above ?



      For further info my Edit View statement is:



      <div class="form-group">
      <label asp-for="RefereeNo" class="control-label"></label>
      <select asp-for="RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
      </div>






      asp.net-core-mvc






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 3 at 3:26









      RodRod

      94




      94
























          2 Answers
          2






          active

          oldest

          votes


















          0














          One of the solution is to add Group property of SelectListItem :



          Controller :



          var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

          List<SelectListItem> selectListItems = new List<SelectListItem>();

          foreach (var official in officials)
          {
          var optionGroup = new SelectListGroup() { Name = official.Key };
          foreach (var item in official)
          {
          selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
          }
          }

          ViewBag.OfficialNo = selectListItems;


          Then in view show/bind the dropdownlist :



          <div class="form-group">
          <label asp-for="@item.RefereeNo" class="control-label"></label>
          <select asp-for="@item.RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
          </div>





          share|improve this answer


























          • Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

            – Rod
            Jan 6 at 5:37











          • @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

            – Nan Yu
            Jan 7 at 1:41













          • In addition, please consider accept the reply as answer ,which may help others who meet same problem .

            – Nan Yu
            Jan 7 at 1:43











          • Consider it done

            – Rod
            Jan 7 at 2:29











          • @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

            – Nan Yu
            Jan 7 at 2:34





















          0














          As per Nan Yu's answer above:



          Controller :



          var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

          List<SelectListItem> selectListItems = new List<SelectListItem>();

          foreach (var official in officials)
          {
          var optionGroup = new SelectListGroup() { Name = official.Key };
          foreach (var item in official)
          {
          selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
          }
          }

          ViewBag.OfficialNo = selectListItems;





          share|improve this answer
























            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%2f54015945%2fhow-do-i-show-multiple-fields-in-a-viewbag-drop-down-list-for-asp-items-in-asp-n%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














            One of the solution is to add Group property of SelectListItem :



            Controller :



            var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

            List<SelectListItem> selectListItems = new List<SelectListItem>();

            foreach (var official in officials)
            {
            var optionGroup = new SelectListGroup() { Name = official.Key };
            foreach (var item in official)
            {
            selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
            }
            }

            ViewBag.OfficialNo = selectListItems;


            Then in view show/bind the dropdownlist :



            <div class="form-group">
            <label asp-for="@item.RefereeNo" class="control-label"></label>
            <select asp-for="@item.RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
            </div>





            share|improve this answer


























            • Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

              – Rod
              Jan 6 at 5:37











            • @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

              – Nan Yu
              Jan 7 at 1:41













            • In addition, please consider accept the reply as answer ,which may help others who meet same problem .

              – Nan Yu
              Jan 7 at 1:43











            • Consider it done

              – Rod
              Jan 7 at 2:29











            • @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

              – Nan Yu
              Jan 7 at 2:34


















            0














            One of the solution is to add Group property of SelectListItem :



            Controller :



            var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

            List<SelectListItem> selectListItems = new List<SelectListItem>();

            foreach (var official in officials)
            {
            var optionGroup = new SelectListGroup() { Name = official.Key };
            foreach (var item in official)
            {
            selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
            }
            }

            ViewBag.OfficialNo = selectListItems;


            Then in view show/bind the dropdownlist :



            <div class="form-group">
            <label asp-for="@item.RefereeNo" class="control-label"></label>
            <select asp-for="@item.RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
            </div>





            share|improve this answer


























            • Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

              – Rod
              Jan 6 at 5:37











            • @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

              – Nan Yu
              Jan 7 at 1:41













            • In addition, please consider accept the reply as answer ,which may help others who meet same problem .

              – Nan Yu
              Jan 7 at 1:43











            • Consider it done

              – Rod
              Jan 7 at 2:29











            • @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

              – Nan Yu
              Jan 7 at 2:34
















            0












            0








            0







            One of the solution is to add Group property of SelectListItem :



            Controller :



            var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

            List<SelectListItem> selectListItems = new List<SelectListItem>();

            foreach (var official in officials)
            {
            var optionGroup = new SelectListGroup() { Name = official.Key };
            foreach (var item in official)
            {
            selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
            }
            }

            ViewBag.OfficialNo = selectListItems;


            Then in view show/bind the dropdownlist :



            <div class="form-group">
            <label asp-for="@item.RefereeNo" class="control-label"></label>
            <select asp-for="@item.RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
            </div>





            share|improve this answer















            One of the solution is to add Group property of SelectListItem :



            Controller :



            var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

            List<SelectListItem> selectListItems = new List<SelectListItem>();

            foreach (var official in officials)
            {
            var optionGroup = new SelectListGroup() { Name = official.Key };
            foreach (var item in official)
            {
            selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
            }
            }

            ViewBag.OfficialNo = selectListItems;


            Then in view show/bind the dropdownlist :



            <div class="form-group">
            <label asp-for="@item.RefereeNo" class="control-label"></label>
            <select asp-for="@item.RefereeNo" class="form-control" asp-items="ViewBag.OfficialNo"><option> </option></select>
            </div>






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Jan 4 at 8:51

























            answered Jan 4 at 8:36









            Nan YuNan Yu

            7,5852763




            7,5852763













            • Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

              – Rod
              Jan 6 at 5:37











            • @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

              – Nan Yu
              Jan 7 at 1:41













            • In addition, please consider accept the reply as answer ,which may help others who meet same problem .

              – Nan Yu
              Jan 7 at 1:43











            • Consider it done

              – Rod
              Jan 7 at 2:29











            • @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

              – Nan Yu
              Jan 7 at 2:34





















            • Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

              – Rod
              Jan 6 at 5:37











            • @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

              – Nan Yu
              Jan 7 at 1:41













            • In addition, please consider accept the reply as answer ,which may help others who meet same problem .

              – Nan Yu
              Jan 7 at 1:43











            • Consider it done

              – Rod
              Jan 7 at 2:29











            • @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

              – Nan Yu
              Jan 7 at 2:34



















            Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

            – Rod
            Jan 6 at 5:37





            Thank you Nan Yu, the change to the controller worked fine. One query (most probably misunderstanding), I did not have to change my edit view, in fact if I do I get an error on the inclusion of @item. (does not exist in current context). ??

            – Rod
            Jan 6 at 5:37













            @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

            – Nan Yu
            Jan 7 at 1:41







            @Rod , yes , you don't need to change your view . your code should work after changing the server side codes.

            – Nan Yu
            Jan 7 at 1:41















            In addition, please consider accept the reply as answer ,which may help others who meet same problem .

            – Nan Yu
            Jan 7 at 1:43





            In addition, please consider accept the reply as answer ,which may help others who meet same problem .

            – Nan Yu
            Jan 7 at 1:43













            Consider it done

            – Rod
            Jan 7 at 2:29





            Consider it done

            – Rod
            Jan 7 at 2:29













            @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

            – Nan Yu
            Jan 7 at 2:34







            @Rod , Please mark answer : stackoverflow.com/help/someone-answers . Not repeat the solution as a reply .

            – Nan Yu
            Jan 7 at 2:34















            0














            As per Nan Yu's answer above:



            Controller :



            var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

            List<SelectListItem> selectListItems = new List<SelectListItem>();

            foreach (var official in officials)
            {
            var optionGroup = new SelectListGroup() { Name = official.Key };
            foreach (var item in official)
            {
            selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
            }
            }

            ViewBag.OfficialNo = selectListItems;





            share|improve this answer




























              0














              As per Nan Yu's answer above:



              Controller :



              var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

              List<SelectListItem> selectListItems = new List<SelectListItem>();

              foreach (var official in officials)
              {
              var optionGroup = new SelectListGroup() { Name = official.Key };
              foreach (var item in official)
              {
              selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
              }
              }

              ViewBag.OfficialNo = selectListItems;





              share|improve this answer


























                0












                0








                0







                As per Nan Yu's answer above:



                Controller :



                var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

                List<SelectListItem> selectListItems = new List<SelectListItem>();

                foreach (var official in officials)
                {
                var optionGroup = new SelectListGroup() { Name = official.Key };
                foreach (var item in official)
                {
                selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
                }
                }

                ViewBag.OfficialNo = selectListItems;





                share|improve this answer













                As per Nan Yu's answer above:



                Controller :



                var officials = _context.Official.GroupBy(x => x.Firstname+" "+x.Surname);

                List<SelectListItem> selectListItems = new List<SelectListItem>();

                foreach (var official in officials)
                {
                var optionGroup = new SelectListGroup() { Name = official.Key };
                foreach (var item in official)
                {
                selectListItems.Add(new SelectListItem() { Value = item.OfficialNo.ToString(), Text = item.OfficialNo.ToString(), Group = optionGroup });
                }
                }

                ViewBag.OfficialNo = selectListItems;






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 7 at 2:33









                RodRod

                94




                94






























                    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%2f54015945%2fhow-do-i-show-multiple-fields-in-a-viewbag-drop-down-list-for-asp-items-in-asp-n%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







                    Popular posts from this blog

                    MongoDB - Not Authorized To Execute Command

                    How to fix TextFormField cause rebuild widget in Flutter

                    in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith