2011-09-28 44 views
1

可以說我有類食品類​​BirdFood從食品派生:KnownType型號在MVC結合期間財產屬性?

public class Food 
{ 
    ... 
} 

public class BirdFood : Food 
{ 
    public int SeedCount { get; set; } 
} 

而且可以說我有一類生物和類鳥,從生物派生

public class Creature 
{ 
    public Food Food { get; set; } 
} 

public class Bird : Creature 
{ 
    ... 
} 

最後,可以說我對生物視圖模型:

public class ViewModel 
{ 
    public Creature Creature { get; set; } 
} 

當我創建鳥的一個實例,我也創建BirdFood的一個實例,並指定我t傳遞給Food屬性並將視圖模型傳遞給View。夠簡單。

public ActionResult Index() 
    { 
     ViewModel viewModel = new ViewModel(); 

     viewModel.Creature = new Bird(); 

     viewModel.Creature.Food = new BirdFood() { SeedCount = 100 } ; 

     return View(viewModel); 
    } 

和視圖:

<% using(Html.BeginForm("Save", "Home", FormMethod.Post)) 
    { %> 

    <%: Html.Hidden("Creature.Food.SeedCount", (Model.Creature.Food as MvcApplication6.Controllers.BirdFood).SeedCount) %> 

    <input type="submit" /> 

<% } %> 

好了,這就是問題所在。當在Action中接收到視圖模型時,Creature屬性是基類Creature,而不是導出類型Bird,派生類型BirdFood的SeedCount屬性具有看起來像Creature.Food.SeedCount 100

的發佈參數(來自螢火蟲) enter image description here

好吧,我的問題是,我該如何維護派生類型時,模型綁定?我懷疑它有一個自定義的模型綁定的事,但我無能,當談到這一點。有任何想法嗎?

回答

2

默認的model binder只需檢查您的視圖模型的類型和使用這些類。他無法猜測你想要一些派生類。一個custom model binder可以用來提供這樣的暗示。這裏是another one

+0

搖滾樂。希望有一個簡單而更原生的解決方案,但這將完成工作。 – Levitikon