如何在ASP.NET MVC运行时创建强类型视图?

时间:2015-06-03 20:31:25

标签: c# .net asp.net-mvc dynamic

我正在使用ASP.NET MVC,需要根据用户选择在运行时创建新视图。这些视图一旦创建,就需要保存在存储中,以便可以重复使用。我更喜欢这些视图是强类型的。当然,每个新视图的模型类都不存在,并且这些类将根据用户创建的内容具有新属性。

例如,如果用户选择了一个文本框并希望它用于firstname,那么最终我希望使用名为FirstName的公共属性动态创建一个类......依此类推。一切都是即时创造的。

我想知道如何处理这个问题。 Dynamic Source Code Generation and Compilation是否会适用于此工作流程,或者这会使它更加复杂吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

数据

 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)