Вы фактически устанавливаете значения для selectCities.
По вашему мнению, у вас есть следующая форма:
@using (@Html.BeginForm())
{
@Html.ListBoxFor(x => x.SelectedCities, Model.Cities, new {
size=@Model.Cities.Count()})
<br/>
<input type="submit" value="submit" />
}
Здесь вы используете следующую строку для генерации списка:
@Html.ListBoxFor(x => x.SelectedCities, Model.Cities, new { size=@Model.Cities.Count()})
Посмотрите документацию по этой функции. Вот как вы «вставляете» выбранные города, когда нажимаете кнопку.
По сути, вы предоставляете следующее функции:
x => x.SelectedCities
-> Города, которые по умолчанию выбраны в списке из вашей viewModel И из выбранных городов, которые будутбыть отправленным в метод POST Index вашего контроллера при отправке формы. Model.Cities
-> Все доступные опции в списке из вашей viewModel. new { size=@Model.Cities.Count()}
--> Установка размера HTML-атрибута.
Поскольку вы используете форму, всякий раз, когда вы нажимаете кнопку «отправить», клиент отправляет IEnumerable<string> SelectedCities
в ваш метод POST, Index.Вот как ваш контроллер получает выбранные значения, а затем выводит этот текст.
Надеюсь, это поможет.Я могу попытаться уточнить, если это необходимо.Я предлагаю прочитать документацию по этой функции и функции BeginForm()
, чтобы получить более подробные сведения.
РЕДАКТИРОВАТЬ: я понял, что вы также спрашивали, как установить список selectedCities.Вы должны настроить этот список так же, как вы устанавливаете член Cities вашей ViewModel в методе GET Index на вашем контроллере:
vmc.Cities = listSelecteditem;
Вам просто нужно создать другой список моделей, представляющих города, которые выхочу выбран.Как вы реализуете эту функцию, конечно, зависит от вас.
Например:
[HttpGet]
public ActionResult Index()
{
EmployeeDbContext db = new EmployeeDbContext();
List<SelectListItem> listSelecteditem = new List<SelectListItem>();
foreach (tblCity city in db.tblCities)
{
SelectListItem selectListItem = new SelectListItem()
{
Text = city.Name,
// Tweaked to use Name instead of ID in post.
Value = city.Name,
Selected = city.IsSelected
};
listSelecteditem.Add(selectListItem);
}
viewmodelCities vmc = new viewmodelCities();
// Simply set your SelectedCities here, and it will be reflected on your page.
vmc.SelectedCities = SomeService.GetSomeCities(someFilter);
vmc.Cities = listSelecteditem;
return View(vmc);
}
, где SomeService.GetSomeCities - это созданная мной функция, которая возвращает IEnumerable<String>
городаидентификаторы.Я также изменил инициализацию списка выбора, чтобы использовать имя в качестве значения вместо идентификатора.