user2609980
user2609980

Reputation: 10514

How to determine selected value in MVC dropdownlist based on web.config in more elegant way

I have a dropdownlist in my view as follows:

@Html.DropDownList("ServerListSL", ViewData["ServerList"] as SelectList, new { @class="form-
    control", id="chosen-server-name"})

Now I take the selected value based on a value in the Web.Config file like this:

public ActionResult Index()
    {
        List<SelectListItem> serverItems = new List<SelectListItem>();

        if (@System.Configuration.ConfigurationManager.AppSettings["server:serverName"].ToString() == "P")
        {
            serverItems.Add(new SelectListItem { Text = "P", Value = "P", Selected = true   });
            serverItems.Add(new SelectListItem { Text = "A1", Value = "A1"                  });
            serverItems.Add(new SelectListItem { Text = "A2", Value = "A2"                  });
            serverItems.Add(new SelectListItem { Text = "T1", Value = "T1"                  });
            serverItems.Add(new SelectListItem { Text = "T2", Value = "T2"                  });
        }
        else if (@System.Configuration.ConfigurationManager.AppSettings["server:serverName"].ToString() == "A1")
        {
            serverItems.Add(new SelectListItem { Text = "P", Value = "P"                    });
            serverItems.Add(new SelectListItem { Text = "A1", Value = "A1", Selected = true });
            serverItems.Add(new SelectListItem { Text = "A2", Value = "A2"                  });
            serverItems.Add(new SelectListItem { Text = "T1", Value = "T1"                  });
            serverItems.Add(new SelectListItem { Text = "T2", Value = "T2"                  });
        }
        else if (@System.Configuration.ConfigurationManager.AppSettings["server:serverName"].ToString() == "A2")
        {
            serverItems.Add(new SelectListItem { Text = "P", Value = "P"                    });
            serverItems.Add(new SelectListItem { Text = "A1", Value = "A1"                  });
            serverItems.Add(new SelectListItem { Text = "A2", Value = "A2", Selected = true });
            serverItems.Add(new SelectListItem { Text = "T1", Value = "T1"                  });
            serverItems.Add(new SelectListItem { Text = "T2", Value = "T2"                  });
        }
        else if (@System.Configuration.ConfigurationManager.AppSettings["server:serverName"].ToString() == "T1")
        {
            serverItems.Add(new SelectListItem { Text = "P", Value = "P"                    });
            serverItems.Add(new SelectListItem { Text = "A1", Value = "A1"                  });
            serverItems.Add(new SelectListItem { Text = "A2", Value = "A2"                  });
            serverItems.Add(new SelectListItem { Text = "T1", Value = "T1", Selected = true });
            serverItems.Add(new SelectListItem { Text = "T2", Value = "T2"                  });
        }
        else if (@System.Configuration.ConfigurationManager.AppSettings["server:serverName"].ToString() == "T2")
        {
            serverItems.Add(new SelectListItem { Text = "P", Value = "P"                    });
            serverItems.Add(new SelectListItem { Text = "A1", Value = "A1"                  });
            serverItems.Add(new SelectListItem { Text = "A2", Value = "A2"                  });
            serverItems.Add(new SelectListItem { Text = "T1", Value = "T1"                  });
            serverItems.Add(new SelectListItem { Text = "T2", Value = "T2", Selected = true });
        }

        ViewData["ServerList"] = serverItems;

        return View();
    }

I have a strong suspicion this can be done more elegantly. Any ideas?

Upvotes: 0

Views: 249

Answers (1)

adelb
adelb

Reputation: 821

List<SelectListItem> serverItems = new List<SelectListItem>();
            serverItems.Add(new SelectListItem { Text = "P", Value = "P" });
            serverItems.Add(new SelectListItem { Text = "A1", Value = "A1" });
            serverItems.Add(new SelectListItem { Text = "A2", Value = "A2" });
            serverItems.Add(new SelectListItem { Text = "T1", Value = "T1" });
            serverItems.Add(new SelectListItem { Text = "T2", Value = "T2" });

            string selectedValue = System.Configuration.ConfigurationManager.AppSettings["server:serverName"].ToString();

            SelectListItem item = serverItems.Where(t => t.Value == selectedValue).SingleOrDefault();

            if (item != null)
            {
                item.Selected = true;
            }

Upvotes: 1

Related Questions