Solved

Default value is not being set in my SelectList in MVC4 View

Posted on 2014-04-04
3
390 Views
Last Modified: 2014-04-14
I have a View that displays a dropdown using the following in my view:

@Html.DropDownListFor(model => model.databaseServerTypeID, (SelectList)@ViewBag.databaseServerTypeID, "-- Choose Server Type --")

Open in new window


My Controller has the following code:
BusinessLogic bl = new BusinessLogic();
SelectList slServerType = bl.CreateServerTypeSelectList(_repository, appcatalog_database.databaseServerTypeID);
ViewBag.databaseServerTypeID = slServerType;
return View(appcatalog_database);

Open in new window


The CreateServerTypeSelectList is defined as follows:
        public SelectList CreateServerTypeSelectList(IAppCatalogContainerRepository repository, int defaultServerType)
        {
            IEnumerable<AppCatalog_ServerType> db;
            db = repository.GetAllServerTypes();           

            SelectList sl;
            if (defaultServerType == 0)
                sl = new SelectList(db, "servertypeID", "servertypeName");
            else
                sl = new SelectList(db, "servertypeID", "servertypeName", defaultServerType);
            
            return sl;
        }

Open in new window


I verified after the list is created that the SelectedValue is 2 which is the same value as the databaseServerTypeID in my model.  (see attached picture)

My view has the following code for displaying the dropdown:
        <div class="editor-field">
            @Html.Label("Server Type", new { @class = "editor-label" }) :
            @Html.DropDownListFor(model => model.databaseServerTypeID, (SelectList)@ViewBag.databaseServerTypeID, "-- Choose Server Type --")
            <span class="error-msg">@Html.ValidationMessageFor(model => model.databaseServerTypeID)</span>
        </div>

Open in new window


I verified that the list in the ViewBag still has the SelectedValue set to 2 and it does (see attached picture).

I've reviewed other posts and it seems like I am doing everything correctly but I can't get the default value to be selected.  Any help is greatly appreciated!
CreateServerTypeSelectList.fw.png
CreateServerTypeSelectListinView.png
0
Comment
Question by:dyarosh
  • 2
3 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 39979968
I am not sure what the problem is, but I am not a big fan of the ViewBag as a viable way to pass stuff to the view.

I prefer the strong-typed ViewModel over the dynamic ViewBag.  

Here is an article that talks about the ViewModel:

Part 3: Views and ViewModels
http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-3
0
 

Accepted Solution

by:
dyarosh earned 0 total points
ID: 39989691
I finally found the problem.  The variable that I used in the ViewBag was the same name as the field in my model.  When I changed the ViewBag variable to ViewBag.ServerTypeList, the default value is getting set.  There must have been some confusion with the names being the same.
0
 

Author Closing Comment

by:dyarosh
ID: 39998544
I had not received any help from the Experts in a while so I kept trying different things until I finally got it to work.
0

Featured Post

MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The object model of .Net can be overwhelming at times – so overwhelming that quite trivial tasks often take hours of research. In this case, the task at hand was to populate the datagrid from SQL Server database in Visual Studio 2008 Windows applica…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question