我以前没有使用过自定义活页夹,所以如果我让这种方式变得比应该的更难,我提前道歉。
我有一个抽象类字段
public class Form
{
public Int32 Id { get; set; }
public String Name { get; set; }
public Int32 Version { get; set; }
public Int32 PreviousVersion { get; set; }
public Models.Field[] FormFields { get; set; }
}
FormFields是一个抽象类
public abstract class Field : iField
{
public Int32 Id { get; set; }
public Int32 FormId { get; set; }
public Int32 Order { get; set; }
public String Name { get; set; }
public Int32 FieldType { get; set; }
public Boolean RequireValue { get; set; }
}
为了简单起见,我将仅列出几个从 Fields 派生的类作为示例
public sealed class Textbox : Field
public sealed class Dropdown: Field
在绑定期间,这应该创建一个数组(FormFields),其中混合了从 Field 派生的不同对象类型。我尝试了几个在网上找到的示例,其中一些建议使用 BindProperty/SetProperty,而另一些建议在 CreateModel 期间构建对象。我查看了使用 ValueProvider 手动构建 Form 对象,但它全部填充在System.Web.Mvc.DictionaryValueProvider<object>其中,解析所有这些内容会很乏味。当我到达 BindProperty 时,它似乎已经决定它是一个 Field 数组,我似乎无法迭代每个数组项来更改绑定。
此时有没有办法重新定义数组?
似乎会有一种更简单的方法,我可以说如果 Field.FieldType = 1 然后绑定为文本框。
有人可以就我如何完成这项任务提供一些指导吗?
我还应该提到调用者是来自 angularjs 的 $http 帖子是否相关。
我的接受 $http angularjs 调用的 MVC 接收器
public JsonResult UpdateForm([ModelBinder(typeof(CustomModelBinder))]Models.Form Form)