如何为MVC3中包含序列化类的字符串创建编辑器

时间:2012-07-28 10:31:02

标签: asp.net-mvc-3 polymorphism editorfor

我的ViewModel中有一个字符串属性,它包含十个可能类之一的序列化表示,每个类都非常不同,所以没有基类。

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

理想情况下,我想为每个可以反序列化到属性中的类创建一个不同的编辑器模板,它们只是

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

我可以以某种方式通知mvc,需要将Configuration反序列化为ConfigurationType的对象,以便它使用正确的模板,然后再次反序列化为字符串。

我很欣赏我在这里详细介绍了细节,但我希望尽可能保持抽象的东西,这样我就不会把水弄得太多。

1 个答案:

答案 0 :(得分:0)

我认为您应该考虑采用不同方式处理手头的问题。我不知道您的问题的详细信息,但根据您提供的信息,我认为以下可能是一个可行的解决方案:

  1. 创建一个ConfigurationBase类,其中包含10个类的公共属性。
  2. 不要让Configuration属性属于String类型,而应该是通用的,即:T。因此,您的视图模型也应该是泛型类型,其中type参数应该约束为ConfigurationBasenew()(因为它应该被序列化/反序列化)。
  3. 既然您的类是通用的,那么您不需要ConfigurationType属性,因此请将其删除。
  4. ConfigurationBase的每个子类创建一个编辑器。
  5. 或者,您可以在视图模型上创建一个方法,如果实际需要,则将配置实例序列化为String
  6. 检查以下代码:

    public class MyViewModel<T> where T : ConfigurationBase, new() 
    {
       public T Configuration {get; set; }
    
       public String SerializeConfiguration() 
       {
          //return the serialized this.Configuration
       }
    }