Как создать редактор для строки, содержащей сериализованный класс в MVC3
У меня есть строковое свойство в моей ViewModel, которое содержит сериализованное представление одного из десяти возможных классов, каждый класс сильно отличается, поэтому для них нет базового класса.
public string Configuration { get; set; }
public string ConfigurationType { get; set;}
В идеале я хотел бы создать разные шаблоны редактора для каждого из классов, которые можно десериализовать в свойство, и они просто имеют
<%= Html.EditorFor(l => l.Configuration)%>
Где я мог как-то сообщить mvc, что Configuration необходимо десериализовать в объект ConfigurationType, чтобы он использовал правильный шаблон, а затем снова десериализовать обратно в строку.
Я ценю то, что здесь я немного разбираюсь в деталях, но я бы хотел, чтобы все было как можно более абстрактно, чтобы я не слишком мутил воду.
1 ответ
Я думаю, что вы, вероятно, должны рассмотреть подход к проблеме по-другому. Я не знаю деталей вашей проблемы, но, исходя из предоставленной вами информации, я думаю, что следующее может быть возможным решением:
- Создать
ConfigurationBase
класс, который содержит общие свойства 10 классов. - Вместо того, чтобы иметь
Configuration
свойство быть типаString
, пусть это будет общим, то есть:T
, Следовательно, ваша модель представления также должна быть универсального типа, где параметр типа должен быть ограниченConfigurationBase
а такжеnew()
(потому что он должен быть сериализован / десериализован). - Теперь, когда ваш класс является общим, вам не нужно
ConfigurationType
свойство, так что удалите его. - Создайте редактор для каждого подкласса
ConfigurationBase
, - При желании вы можете создать метод в вашей модели представления, который сериализует экземпляр конфигурации в
String
если это действительно требуется.
Проверьте код ниже:
public class MyViewModel<T> where T : ConfigurationBase, new()
{
public T Configuration {get; set; }
public String SerializeConfiguration()
{
//return the serialized this.Configuration
}
}