2009-03-16 17 views
2

ビューのタイプの通知がないコントローラでupdateModelを使いたいです。 異なるタイプの異なるビューを持っていますが、すべて継承型としてExternalBaseクラスを持っています。MVC Controller of view of UpdateModel

私のコントローラでは、私は常にExternalBaseを持っていますが、コントローラは正しいタイプを認識していません。

私は正しいオブジェクトを取得するメソッドを呼び出して保存しますが、これをexternalBaseとして返します。 innertypeは私の正しいタイプです。オブジェクトにカーソルを合わせると、保存を呼び出すビューのタイプになります。これでupdateModelを呼び出すと、プロパティが埋め込まれません。一例として、

:MyExternalBaseは空のクラス

クラスperson保存上の私のコントローラで

public class Person 
    : MyExternalBase 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<TheParameters> Parameters { get; set; } 
    public Address Address { get; set; } 

    public TheParameters[] OtherParameters { get; set; } 
} 
public class Address 
{ 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public TheParameters Parameter { get; set; } 
} 
public class TheParameters 
{ 
    public string Parameter { get; set; } 
} 

ある

//私は、次の手順を実行します

 MyExternalBase p = new Person(); 

     UpdateModel(p, "Person", form.ToValueProvider()); 

これでpは満たされません。

代わりにPerson p = new Person()を使用すると問題ありません。しかし私は私のコントローラがビューの種類に依存しないようにしたい。

これはupdateModelのエラーですか、それとも不可能なことですか? それを回避する方法はありますか?

答えて

0

私はあまりにもこの答えを知りたいと思いますが、すべてのデータが入った正しいタイプに安全にダウンキャストできても、基本クラスを渡すと非常に似た問題が発生します。

UpdateModelは、basetypeを正しいタイプにダウンキャストしない限り、内部プロパティを表示していないようですが、正しいタイプを取得するためにswitch文が必要です。その後、

+0

[回答はこちら](http://stackoverflow.com/questions/649733/mvc-controller-independent-of-type-of-view-updatemodel/3113012#3113012) – bzlm

6

あなたは.NET 4.0を使用している場合は、使用してみてください:

dynamic p = new Person(); 
UpdateModel(p); 

をそのような状況では、のUpdateModelは正常に動作します。単一のコントローラで作業しているとき、同じタイプからすべて継承したいくつかのオブジェクトに使用したいという見方もありました。

+1

完全に私が必要なもの!ありがとう! – claco

+0

本当にいいです!私はそれを考えなかったと思う。 – PeterS

+0

本当に素敵な男:) – eka808