0

I have a string property in my ViewModel which contains a serialized representation of one of ten possible classes, each class is very different so there is no base class for them.

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

Ideally I would like to create a different editor template for each of the classes that could be deserialized into the property and them simply have

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

Where I could somehow inform mvc that Configuration needs to be deserialized into an object of ConfigurationType for it to use the correct template and then deserialize back to a string again.

I appreciate that I'm light on details here but I'd like to keep things as abstract as possible so I don't muddy the waters too much.

4

1 に答える 1

0

目前の問題に別の方法でアプローチすることを検討する必要があると思います。あなたの問題の詳細はわかりませんが、あなたが提供した情報から、次のことが実行可能な解決策になると思います。

  1. ConfigurationBase10 個のクラスの共通プロパティを含むクラスを作成します。
  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
   }
}
于 2012-07-28T21:21:56.873 に答える