【发布时间】:2015-08-18 06:04:22
【问题描述】:
我正在使用 ASP.NET MVC,并且需要在运行时根据用户选择创建新视图。这些视图一旦创建,就需要保存在存储中,以便可以重复使用。我更喜欢这些视图是强类型的。每个新视图的模型类自然不存在,这些类将根据用户创建的内容具有新属性。
例如,如果用户选择一个文本框并希望将其用作名字,最终我希望使用名为 FirstName 的公共属性动态创建一个类...等等。一切都是即时创建的。
我想了解如何解决这个问题。 Dynamic Source Code Generation and Compilation 是否适用于这个工作流程,或者这是否比它应该的更复杂?
更新:
一个用例是如果需要根据用户对数据库表的选择来创建表单。如果有数百个表,我不会创建数百个视图。我知道我可以在这个例子中使用网格视图,但对于所有情况,动态视图更合适。
【问题讨论】:
-
为什么不使用通用视图和模型?
-
我将有绑定到模型类的表单元素
-
你问错问题了。您已经决定要遵循特定的方法,但您不知道如何使该方法起作用,因此您在询问如何使该方法起作用……但实际上您需要询问如何解决您的实际问题(不一定是动态代码生成)。您应该做的是询问您实际想要开发的功能......而不是您想要实现的技术。你能准确解释一下你想做什么,它的目的是什么?
-
@Erik 我想动态创建视图。我已经解释了为什么需要这样做。用户可以根据他们想要看到的内容实时创建表单。然后我说我希望将元素绑定到模型类,以便它们可以轻松保存和重用。这些是特征。然后我问代码生成是否是一个好方法。我想我说清楚了。如果你不明白我想说什么,也许你需要问一些具体的问题。
-
“根据他们想要看到的内容实时创建表单”并不意味着您需要任何类型的任何代码生成。我问的是细节,因为那太模糊了。例如,您可以在模型中简单地拥有“CustomForm”对象的集合,这些对象可以是派生类型的层次结构,所有这些都在基本集合中。然后,您可以使用编辑器和显示模板来呈现这些类型,无需生成代码,并且您仍然可以获得强类型。这是我的观点,因为您会立即跳到一个不需要且复杂的实现。
标签: c# .net asp.net-mvc dynamic