自动构建表单
方式一:通过类构建
- 第一步定义类
/// <summary> /// 链接 /// </summary> public class Link : WidgetBase { /// <summary> /// 链接名称 /// </summary> [Display(Name = "链接名称")] [Field(ListShow = true, EditShow = true, ControlsType = ControlsType.TextBox)] [Required(ErrorMessage = "链接名称不能为空")] [StringLength(20, ErrorMessage = "链接名称不能操作20个字符")] public string Name { get; set; } /// <summary> /// 链接URL /// </summary> [Display(Name = "URL")] [Field(ListShow = true, EditShow = true, ControlsType = ControlsType.TextBox)] [Required(ErrorMessage = "链接不能为空")] public string Url { get; set; } /// <summary> /// 图标 /// </summary> [Display(Name = "图标")] [Field(ListShow = false, EditShow = true, ControlsType = ControlsType.TextBox)] public string Icon { get; set; } /// <summary> /// 打开方式 /// </summary> /// [Display(Name = "打开方式")] [Field(ListShow = true, EditShow = true, ControlsType = ControlsType.DropdownList, DataSource = "ZKCloud.Core.Theme.Domain.Enums.Target")] public Target Target { get; set; } /// <summary> /// 链接字体颜色 /// </summary> [Display(Name = "颜色")] [Field(ListShow = false, EditShow = true, ControlsType = ControlsType.Color)] public string Color { get; set; } = "#666666"; /// <summary> /// 链接标题 /// </summary> [Display(Name = "链接标题")] [Field(ListShow = false, EditShow = true, ControlsType = ControlsType.TextBox)] public string Title { get; set; } } }
- 在cshtml文件中设置 ViewData["propertys"]
Type t = Type.GetType(ViewData["Type"].ToString()); ClassPropertyAttribute typeclassProperty = t.GetTypeInfo().GetCustomAttribute<ClassPropertyAttribute>(); ClassDescription configDescription = new ClassDescription(t); var propertys = configDescription.Propertys.Where(r => r.PropertyAttribute.EditShow == true);
- 引用ClassControl
ViewData["propertys"] = propertys; @await Html.AdminWidget("Core", "Common/ClassControl", ViewData)
方式二:通过数据库DataField构建