c# - 具有多态数组属性的 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)
解决方案
推荐阅读
- java - 在我的项目中实施县代码选择器时出错
- android - 无法安装-写入所有apks samsung GT-I9500
- angular - 我是角垫形式的新手,请建议我哪个最好
或 html 引导表单字段 - c# - 如何使用 Azure AD 对同一应用程序的多个实例进行身份验证
- jquery - Bootstrap 4模式事件未触发
- json - 遍历 JSON 数据
- c# - 如何仅获取任务管理器的“应用程序”部分中的进程以及如何获取当前打开的进程?(C#)
- postgresql - 如何检查数组索引元素是否存在
- reactjs - 使用 reactjs 上传多个文件
- reactjs - 如何将 thunk 动作转换为 saga