如何在运行时期间创建强类型视图.净MVC

本文关键字:强类型 视图 MVC 创建 运行时 | 更新日期: 2023-09-27 17:53:26

我使用的是ASP。并且需要在运行时根据用户选择创建新视图。这些视图一旦创建,就需要保存在存储中,以便重用。我希望这些视图是强类型的。当然,每个新视图的模型类并不存在,这些类将根据用户创建的内容拥有新的属性。

例如,如果用户选择了一个文本框,并希望它用于firstname,最终我想有一个类动态创建一个名为firstname的公共属性…等等......一切都是动态创建的。

我想知道如何处理这件事。动态源代码生成和编译是否适用于这个工作流程,或者它是否比它应该的更复杂?

更新:
一个用例是,如果需要根据用户选择的数据库表创建表单。如果有数百个表,我就不会创建数百个视图。我知道我可以在这个例子中使用gridview,但对于所有情况,动态视图更合适。

如何在运行时期间创建强类型视图.净MVC

您的用户选择是数据,而不是代码:

  • 根据用户选择创建数据结构。
  • 将它们保存在数据库中供以后使用。
  • 编写一个视图来获取这些数据结构(作为模型)并显示它们
  • 编辑模板可以用来显示每个单独的控件,使用强类型的视图。

数据
 public class Page
 {
     public List<Control> Controls { get; set; }
 }
 public class Textbox : Control
 {
     public string Label { get; set; }
     public string Value { get; set; }
 }

Page.cshtml

@model Page
@for (int i 0; i < Model.Controls.Count; i++)
{
     // Render using the EditorTemplate view for the control's type
     @Html.EditorFor(m => m.Controls[i])
}

EditorTemplates/Textbox.cshtml

@model Textbox
@Html.HiddenFor(m => m.ControlId)
@Html.LabelFor(m => m.Value, Model.Label)
@Html.TextBoxFor(m => m.Value)