2013-07-16 17 views
1

我有一個MVC模型,其中包含一個屬性,該屬性包含從單一類型繼承的類型的泛型集合。它完全按照我的預期顯示編輯器,但是當我回傳所有項目的類型都是基本類型時。我如何獲得它返回正確的類型?ASP.NET MVC不同子類的泛型列表

型號...

public class PageEM { 
    public long Id { get; set; } 
    public virtual IList<FieldEM> Fields { get; set; } 
} 
public class FieldEM { // I'd really like this to be abstract. 
    public long Id { get; set; } 
    public string Caption { get; set; } 
    public string Value { get; set; } 
} 
public class TextFieldEM : FieldEM { 
} 
public class CheckBoxFieldEM : FieldEM { 
    public bool ValueData { 
     get { return (bool)Value; } 
     set { Value = (string)value; } 
} 

PageEM查看...

@model PageEM 
@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Fields</legend> 
     @Html.HiddenFor(m => m.Id) 
     @Html.EditorFor(m => m.Fields) 
    <input type="submit" value="Submit" title="Submit" /> 
    </fieldset> 
} 

TextFieldEM編輯器...

@model TextFieldEM 
<div> 
    @Html.HiddenForFor(m => m.Id) 
    <div> 
     @Html.LabelFor(m => m.Value, Model.Caption) 
    </div> 
    <div class="editor-field"> 
     @Html.TextBoxFor(m => m.Value) 
     @Html.ValidationMessageFor(m => m.Value) 
    </div> 
</div> 

CheckBoxFieldEM編輯器...

@model CheckBoxFieldEM 
<div> 
    @Html.HiddenForFor(m => m.Id) 
    <div class="editor-field"> 
     @Html.EditorFor(m => m.DataValue)@Html.LabelFor(m => m.DataValue, Model.Caption, new { @class = "checkbox" }) 
    </div> 
</div> 

控制器...

public partial class PageController : Controller { 
    public virtual ActionResult Edit() { 
     PageEM em = new PageEM() { 
      Id = 123, 
      Fields = new List<FieldEM>() { 
       new TextFieldEM() { Id = 1, Caption = "Text Line", Value = "This is test" }, 
       new CheckBoxEM() { Id = 2, Caption = "Check here", ValueData = true } 
      } 
     }; 
     return View(em); 
    } 
    [HttpPost] 
    public virtual ActionResult Edit(PageEM em) { 
     if (!ModelState.IsValid) 
      return View(em); 
     // but all of the em.Fields are FieldEM. 
    } 
} 

所以我會得到怎樣它回來後與子類FieldEMs?

回答