2009-06-16 10 views
0

私は継承一部が.NET MVCビューページ<T1>とViewUserControl <T2>行動

Inherits="System.Web.Mvc.ViewUserControl<Address> 

Userクラスのように見えると継承一部が

Inherits="System.Web.Mvc.ViewPage<User>" 

のように見えるとビューページやViewUserControlを持っています(短縮された)基本的に次のようになります。

class User { 
public virtual Address address { get; set; } 

}

は今、私がしようとした場合:

Html.RenderPartial("Address", Model.address); 

は、私は潜在的にいくつかの奇妙な動作を得ます。私の場合は、フレームワークは、モデル(すなわちタイプ= User)を渡そうとしましたと、エラー(予期しないタイプ)を投げていたように見え、Model.addressが代わりにコントロールにnullを渡すのヌルだっ判明します。私のアドレスがnullであったという事実を無視

は、親オブジェクトにバグ、または予想される動作を不履行の場合の動作です。もしそれが期待された動作なら、なぜ誰かが説明できますか?理解できません。

答えて

1

は、非常に多くの質問のこれらの種類は、他の場所で間違いを犯してOPになり、エラーが再現可能ではありません。私はあなたの正確なシナリオを再現しようとした、とあなたは何を知っていますか?あなたが実際に正しい:)私は、単純な親/子関係を作成し、ビュータイプの子であることが持っていた、とヌルだっ型child.Parentの部分、と私はnull参照を取得していない、私が実際にやりました型の不一致エラーが発生します。実際には、明示的にビューににnullを渡された場合でも:

直接キャストと
Html.RenderPartial("MyPartial",null); 

かさえ:

Html.RenderPartial("MyPartial",(Parent)null); 

それはまだ不一致エラーを与えました。

マイを推測し、これは本当に総推測です、実際のビュー自体のモデルを使用することがで渡されるオブジェクトがnullであることを検出し、それだけで、デフォルトということです。私は、これは、設計やバグであるいずれかのかどうかわからないんだけど、それは理にかなっているだけのことです。

+0

感謝を。少なくとも私は今私だけではないことを知っています。誰かに答えがあることを願っています。 1の努力のためにあなたが –

0

私はあなたのビューにヌルモデルを渡すことは避けるべきと信じています。モデルがnullの場合は、デフォルト/空モデルを使用します。これは動作するはずです:動作を確認するための

Html.RenderPartial("Address", Model.address ?? new Address { /* OPTIONAL: default values */}); 
+0

が合意:-)に行ってきましたが、私はそれによって「ユーザー」モデルに、それはデフォルト:-(動作の詳細好奇心が強いです –

関連する問題