2010-01-05 2 views
6

Я хотел бы знать, как я могу привязать свои значения формы к своему строго типизированному представлению из поля MultiSelect.asp.net mvc сильно типизированная модель просмотра с мультиселектором

Очевидно, что когда форма отправляет поле с несколькими выборами, будет отправлена ​​строка с выделенными моими значениями ... что лучший способ преобразовать эту строку значений обратно в список объектов для прикрепления к моей модели обновлен?

public class MyViewModel { 
    public List<Genre> GenreList {get; set;} 
    public List<string> Genres { get; set; } 
} 

При обновлении моей модели внутри контроллера я использую UpdateModel, как показано ниже:

Account accountToUpdate = userSession.GetCurrentUser(); 
UpdateModel(accountToUpdate); 

Однако мне нужно каким-то образом получить значения из строки в объекты.

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

Спасибо! Paul

ответ

3

Вы правы, что модельное связующее - это путь. Попробуйте это ...

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 

[ModelBinder(typeof(MyViewModelBinder))] 
public class MyViewModel { 
    .... 
} 

public class MyViewModelBinder : DefaultModelBinder { 
    protected override void SetProperty(ControllerContext context, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { 
     if (propertyDescriptor.Name == "Genres") { 
      var arrVals = ((string[])value)[0].Split(','); 
      base.SetProperty(context, bindingContext, propertyDescriptor, new List<string>(arrVals)); 
     } 
     else 
      base.SetProperty(context, bindingContext, propertyDescriptor, value); 
    } 
} 
0

Отъезд Phil Haacks blog post по теме. Я использовал это как основу для множественного выбора строго типизированного представления в недавнем проекте.

+0

Сообщение Haack's о переплетном списке объектов, а не списка ... –

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