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?
謝謝ataravati。我會研究這一點。 –