Как создать редактор для строки, содержащей сериализованный класс в MVC3

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

public string Configuration { get; set; }
public string ConfigurationType { get; set;}

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

<%= Html.EditorFor(l => l.Configuration)%>

Где я мог как-то сообщить mvc, что Configuration необходимо десериализовать в объект ConfigurationType, чтобы он использовал правильный шаблон, а затем снова десериализовать обратно в строку.

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

1 ответ

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

  1. Создать ConfigurationBase класс, который содержит общие свойства 10 классов.
  2. Вместо того, чтобы иметь Configuration свойство быть типа String, пусть это будет общим, то есть: T, Следовательно, ваша модель представления также должна быть универсального типа, где параметр типа должен быть ограничен ConfigurationBase а также new() (потому что он должен быть сериализован / десериализован).
  3. Теперь, когда ваш класс является общим, вам не нужно ConfigurationType свойство, так что удалите его.
  4. Создайте редактор для каждого подкласса ConfigurationBase,
  5. При желании вы можете создать метод в вашей модели представления, который сериализует экземпляр конфигурации в String если это действительно требуется.

Проверьте код ниже:

public class MyViewModel<T> where T : ConfigurationBase, new() 
{
   public T Configuration {get; set; }

   public String SerializeConfiguration() 
   {
      //return the serialized this.Configuration
   }
}
Другие вопросы по тегам