7

カスタム モデル バインディングなしでこれを処理する方法はありますか?

public class MyViewModel {
  public string UserId { get; set; }
  public IJob Job { get; set; }
}

public interface IJob {
  public long Id { get; set; }
  public string CompanyName { get; set; }
}

public class FullTimeJob : IJob {
  // omitted for brevity
}

public class Internship : IJob {
  // omitted for brevity
}

私が抱えている問題は、インスタンス化する IJob の実装を理解していないため、デフォルトのモデル バインダーでエラーが発生することです。MyViewModel を作成したときに、FullTimeJob のインスタンスをその Job プロパティに設定しました。ASP.NET は実装型を保持できないのでしょうか?

これに対するベストプラクティスソリューションは何ですか?

4

2 に答える 2

1

ビューは、UIとコントローラー間の単なるデータキャリアです。したがって、IdプロパティとCompanyNameプロパティをビューに追加するだけです。あなたがしたいのはUIからIDと会社の価値を取得することだけだからです。UIからデータを取得する際に、インターンシップであるかフルタイムであるかは重要ではない場合があります。UIから取得したデータを処理する場合は重要な場合がありますが、Viewの責任ではありません。

于 2012-12-22T16:44:51.257 に答える
0

特にエレガントではありませんが、1つのオプションは次のとおりです。

public class MyViewModel {
    public string UserId { get; set; }
    public FulltimeJob FulltimeJob { get; set; }
    public InternJob InternJob { get; set; }

    public IJob Job { get { return FulltimeJob ?? InternJob; } }
}

これにより、クラス固有のプロパティへのアクセスを維持しながら、Job プロパティを介して共有プロパティに簡単にアクセスできます。

次に、POST コントローラー メソッドでどのプロパティが設定されているかを確認し、それに応じて操作できます。

于 2012-12-23T03:42:45.437 に答える