2015-06-12 4 views
0

у меня есть вид модели, как так:Bind Множественный выбор в список объектов

public class ListingPlanEditorViewModel 
{ 
    public ListingPlan Plan { get; set; } 
    public IEnumerable<Directory> SiteDirectories { get; set; } 
} 

Одно свойство является объектом типа ListingPlan здесь:

public class ListingPlan 
{ 
    public int? ListingPlanID { get; set; } 
    public int DescriptionLinesCount { get; set; } 
    public List<Directory> Directories { get; set; } 
} 

Справочник объект выглядит следующим образом:

public class Directory 
{ 
    public int DirectoryID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

У меня есть контроллер, который возвращает объект ListingPlanEditorViewModel для представления:

public ActionResult ConfigurePlan(int? listingIdentifier) 
    { 
     ListingPlan plan = new ListingPlan() 
     { 
      DescriptionLinesCount = 10, 
      Directories = new List<Directory>() 
      { 
       new Directory() 
       { 
        DirectoryID = 3 
       }, 
       new Directory() 
       { 
        DirectoryID = 4 
       } 
      } 
     }; 
     ListingPlanEditorViewModel model = new ListingPlanEditorViewModel() 
     { 
      Plan = plan,//_listingRepository.GetListingPlan(listingIdentifier, null), 
      SiteDirectories = _database.GetDirectories() 
     }; 

     return View(model); 
    } 

Я хотел бы создать окно MULTISELECT, который будет связывать выбранные значения к свойству плана в ListingPlanEditorViewModel, установив свойство DirectoryID для каждого выбора. Поэтому после привязки я должен иметь объекты List of Directory. Все с их набором DirectoryID.

У меня возникли проблемы с этим. Я могу создать multiselectbox с правильными выбора опций в нем, но я не могу получить их в своем почтовом действие, которое выглядит следующим образом:

@using (Html.BeginForm("ConfigurePlan", "ListingPlan")) 
{ 
    <div class="form-body"> 
     @Html.ListBoxFor(model => model.Plan.Directories, new MultiSelectList(Model.SiteDirectories, "DirectoryID", "Name")) 
</div> 

<button type="submit">submit</button> 
} 
+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

2

Вы должны создать [] или List из IDs в ViewModel, что сохранит выбранные значения.

public class ListingPlanEditorViewModel 
{ 
    public ListingPlan Plan { get; set; } 
    public IEnumerable<Directory> SiteDirectories { get; set; } 
    public int[] DirectoryIDs {get;set;} 
} 

View изменится в соответствии с. Выбранные каталоги будут сохранены в DirectoryIDs.

@using (Html.BeginForm("ConfigurePlan", "ListingPlan")) 
{ 
    <div class="form-body"> 
     @Html.ListBoxFor(model => model.DirectoryIDs, new MultiSelectList(Model.SiteDirectories, "DirectoryID", "Name")) 
    </div> 

    <button type="submit">submit</button> 
} 

Сейчас на POST действий вы можете запросить базу данных и получить Directories, который был выбран пользователем.

Примечание: Вы не можете просто получить полные объекты на потому что ListBoxFor будет генерировать <select multiple ... > ... </select> тег не будет знать, как выполнить привязку к объекту.

+0

Я думаю, вы имеете в виду 'public int [] DirectoryIDs {get; set;}' :) –

+0

@ Stephen-Muecke У вас есть глаза ястреба сэр, я говорил о массиве, но я забыл добавить его. – adricadar

Смежные вопросы