Rob*_*ool 24 asp.net-mvc dynamic-data
这是一个一般设计问题: 如何在ASP.NET MVC中实现动态(运行时生成)表单?
情况如下:
自定义不需要支持嵌套控件,第三方控件等等,但我怀疑一个非常优雅的设计可以实现这一点.大多数情况下,我只需要管理员能够指定其他字段作为文本框,复选框,单选按钮和组合框.我还需要应用程序为数据分配一个空间以保存在数据库中,但我相信我已经找到了那个部分.
谢谢您的帮助.
实现此目的的一种方法是创建您自己的表单ModelBinder
,它将成为生成表单的核心。模型绑定器负责验证ModelState
和重建类型化ViewDataModel
(假设您的视图已类型化)。
DataAnnotations模型绑定器可能是一个很好的参考,这个自定义模型绑定器允许您通过描述属性的验证(并提示 UI 渲染)来执行此操作。然而,这都是定义的编译时间,但对于开始编写自定义模型绑定器来说是一个很好的参考。Attributes
ViewDataModel
在您的情况下,您的模型绑定器应该在运行时从 xml 文件/字符串获取字段的验证。
如果你有这样的路线:
routes.MapRoute(null, "Forms/{formName}/", new { action = "Index", controller = "Forms", formName = ""}),
Run Code Online (Sandbox Code Playgroud)
然后您可以找到正确的表单 xmlFormsController.Index(string formName)
并将其传递给视图。
应该FormsModel
包含所有可能的获取数据的方法,我没有看到任何其他方法可以解决这个问题。Xml 可以映射到一个函数名称(甚至可能是参数),您可以使用反射来调用该函数名称来FormsModel
填充ViewData
或键入ViewDataModel
数据。
表单索引视图可以通过HtmlHelper
采用XmlDocument
.
然后,当您(或 asp.net mvc)将ViewData
表单绑定到自定义模型绑定器时,它可以检查当前控制器值以查找 formName 并查找包含所有验证规则的相应 xml。然后ModelBinder
负责填充ModelState
任何运行时定义的错误。
这是一项艰巨的任务,但在我看来,当成功完成时,这是非常值得的:)
正如 David Liddle 所建议的,更新模型数据的更好替代方案是非常松散的数据库模式。我仍然会遇到将其保存为 xml(或其他序列化格式)并使用它来生成视图并保存自定义验证规则的麻烦,ModelBinder
以便您可以更好地控制每个字段的布局和验证。
归档时间: |
|
查看次数: |
27625 次 |
最近记录: |