2011-09-13 78 views
1

同じページに複数のフォームを表示するビューのビューモデルがあります。このビューモデルには、レンダリングされる各フォームの「サブビューモデル」が含まれています。各フォームには独自のPartialViewがあります。別のクラスから継承したViewModelを使用する部分的なビューは機能しません

これらのフォームはすべて、一連のプロパティ(連絡先情報)を共有しますが、各フォームには別個の追加プロパティセットがあります。だから私は、これらのフォームクラスのそれぞれが基本クラスから継承することが理にかなっていると思った。ただし、URLにアクセスしようとすると、次のエラーが発生します。

辞書に渡さモデル項目タイプ 「MyProject.ViewModels.JobForm」であるが、この辞書 型 「MyProject.ViewModels.NightShiftForm」のモデル項目を必要とします。 '_NightShiftForm' の

メインビュー

<%@ Control Language="C#" 
    Inherits="ViewUserControl<MyProject.ViewModels.JobsViewModel>" %> 

<%: Html.Partial("_NightShiftForm", Model.NightShiftForm) %> 
<%: Html.Partial("_DayShiftForm", Model.DayShiftForm) %> 

部分図

<%@ Control Language="C#" 
    Inherits="ViewUserControl<MyProject.ViewModels.NightShiftForm>" %> 

ビューモデル&フォームクラス

public class JobsViewModel { 
    public NightShiftForm NightShiftForm { get; set; } 
    public DayShiftForm DayShiftForm { get; set; } 
} 

public class JobForm { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class DayShiftForm : JobForm { 
    public string PreferredCoffeeBrand { get; set; } 
    public bool IsMorningPerson { get; set; } 
} 

public class NightShiftForm : JobForm { 
    public string PreferredLocation { get; set; } 
    public string PreferredNights { get; set; } 
} 

これはなぜ起こっているのでしょうか?

+0

は、私はあなた 'JobsViewModel'で2つのプロパティはJobForm''タイプのものであり、あなたがここにあなたの質問 'NightShiftForm'と' DayShiftForm'に示されていないようと思われます。あなたの質問にあなたが示したことはうまくいくはずです。 –

答えて

3

モデルパラメータとしてnull値をHtml.RenderPartialに渡すと、MVCに苦労することが分かります。私の修正は、以下のようになります。

public class JobsViewModel { 
    public NightShiftForm NightShiftForm { get; set; } 
    public DayShiftForm DayShiftForm { get; set; } 

    public JobsViewModel() { 
    NightShiftForm = new NightShiftForm(); 
    DayShiftForm = new DayShiftForm(); 
    } 
} 
+1

はい... nullモデルをRenderPartial()に渡すときにも問題が発生しました... MVCは親の型を探すようです。これは確かにここの解決策です。モデル(またはサブモデル)がインスタンス化されていることを確認してください。 – cyrotello

+0

ありがとう、私を別の時間を無駄にしてくれました.... – Cohen

関連する問題