2

ビューの型を通知しないコントローラで updateModel を使いたい。タイプが異なるさまざまなビューがありますが、すべて継承されたタイプとして ExternalBase クラスがあります。

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

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

例として:

// MyExternalBase は空のクラスです

クラスの人

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 のエラーですか、それとも不可能なことですか? または、それに対する回避策はありますか?

4

2 に答える 2

6

.NET 4.0 を使用している場合は、次を使用してみてください。

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

その場合、UpdateModel は適切に機能します。同じタイプからすべて継承する複数のオブジェクトに使用したい単一のコントローラーとビューで作業しているときにも、これに遭遇しました。

于 2010-06-24T18:50:27.687 に答える
0

私もこれに対する答えを知りたいのですが、すべてのデータをそのままにして正しい型に安全にダウンキャストできるにもかかわらず、基本クラスを渡すときに非常に似たような問題があります。

基本型を正しい型にダウンキャストしない限り、UpdateModel は内部プロパティを認識しないようですが、これには正しい型を取得するための switch ステートメントが含まれます。

于 2010-02-20T00:16:23.910 に答える