2014-05-13 118 views
2

處理綁定複雜視圖模型的推薦方法是什麼?例如,使用以下對象:使用動態視圖模型綁定ASP.NET MVC模型

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

    //I have also tried a generic object instead of dynamic with the same results 
    public dynamic PreferredSportsTeam { get; set; }  
} 

class SportsTeamViewModel 
{ 
    public string Name { get; set; } 
    public string City { get; set; } 
} 

class BaseballTeamViewModel : SportsTeamViewModel 
{ 
    public double TeamERA { get; set; } 
} 

class HockeyTeamViewModel : SportsTeamViewModel 
{ 
    public int TotalSaves { get; set; } 
} 

我試圖把任何一個BaseballTeamViewModel的實例或HockeyTeamViewModel到PersonViewModel的「PreferredSportsTeam」屬性,然後傳遞PersonViewModel到編輯視圖允許用戶可以編輯所有的字段。

我已成功使用EditorTemplates顯示存儲在「PreferredSportsTeam」屬性中的對象的相應視圖。但是,在提交編輯表單時,MVC模型聯編程序無法重建PreferredSportsTeam中存儲的任何對象。它確實正確地填充了名字和姓氏屬性,但PreferredSportsTeam屬性總是以普通對象的形式返回,我無法將其轉換爲其他任何東西。

有沒有我缺少的東西,或者它不可能與默認的MVC模型聯編程序?我知道自定義模型粘合劑,並認爲它們可能是一種解決方案,但我對他們不瞭解足夠的知識以瞭解如何使用它們來解決問題。

+1

我只能想到使用自定義模型活頁夾。看看這個帖子的一些想法:http://www.matthidinger.com/archive/2011/08/16/An-inheritance-aware-ModelBinderProvider-in-MVC-3.aspx – Chandu

+1

我會說這是完美的候選人爲基於任務的用戶界面..而不是一個完整的「一個POST來統治他們」的CRUD方法。 –

回答

2

下面的代碼示例演示如何使用動態對象:

var team = new Team(); 
team.FirstName = "FirstName"; 
team.LastName = "LastName"; 

var baseballTeam = new BaseBallTeam(); 
baseballTeam.TotalSaves = 100; 

team.PreferredSportsTeam = new ExpandoObject(); 
team.PreferredSportsTeam.BaseBallTeam = baseballTeam; 

進行更詳細的說明,請參見This