首页 > 解决方案 > 具有多态数组属性的 ASP.NET MVC 绑定传入对象

问题描述

我以前没有使用过自定义活页夹,所以如果我让这种方式变得比应该的更难,我提前道歉。

我有一个抽象类字段

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)

标签: c#angularjsasp.net-mvcbindingpolymorphism

解决方案


推荐阅读