You need to use for loop instead of foreach, so that each dropdownlist has unique id.
<form action="/" method="post">
<select id="CartItemPreferences_0__Selected" name="CartItemPreferences[0].Selected">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<select id="CartItemPreferences_1__Selected" name="CartItemPreferences[1].Selected">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<input type="submit" value="Submit"/>
</form>
Model
public class PreferencesShoppingCartViewModel
{
public List<CartItemPreference> CartItemPreferences { get; set; }
public List<SelectListItem> PreferenceOptions { get; set; }
public PreferencesShoppingCartViewModel()
{
CartItemPreferences = new List<CartItemPreference>();
PreferenceOptions = new List<SelectListItem>();
}
}
public class CartItemPreference
{
public string Selected { get; set; }
public CartItem CartItem { get; set; }
}
public class CartItem
{
public string Sample { get; set; }
}
View
@model DemoMvc5.Models.PreferencesShoppingCartViewModel
@{
ViewBag.Title = "Home Page";
}
@using (Html.BeginForm("Index", "Home"))
{
for (int i = 0, length = Model.CartItemPreferences.Count; i < length; i++)
{
@Html.DropDownListFor(m => Model.CartItemPreferences[i].Selected, Model.PreferenceOptions)
}
<input type="submit" value="Submit"/>
}
Controller
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new PreferencesShoppingCartViewModel
{
CartItemPreferences = new List<CartItemPreference>
{
new CartItemPreference { CartItem = new CartItem { Sample = "Sample 1"}},
new CartItemPreference { CartItem = new CartItem { Sample = "Sample 2"}}
},
PreferenceOptions = new List<SelectListItem>
{
new SelectListItem {Text = "Option 1", Value = "1"},
new SelectListItem {Text = "Option 2", Value = "2"},
new SelectListItem {Text = "Option 3", Value = "3"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(PreferencesShoppingCartViewModel model)
{
// Do something
return View(model);
}
}
Screen Shots

