Asp.net mvc asp.net mvc 3与动态视图生成

Asp.net mvc asp.net mvc 3与动态视图生成,asp.net-mvc,dynamic,view,Asp.net Mvc,Dynamic,View,我正在实现一个自定义用户配置文件屏幕 这几乎是一个典型的用户配置文件屏幕,您可以在大多数具有某种成员资格元素的网站上找到它 在我的例子中,由于屏幕是market research SAS产品的一部分,因此配置文件上显示的数据点将因market research产品而异。产品的主持人将通过提供以下信息来指定需要捕获哪些数据点: 字段名称、显示名称、字段类型(文本、数字、单选按钮、复选框等),必填项 我一直在试图弄清楚如何动态生成MVC视图以反映所请求的数据点列表。我希望尽可能多地使用MVC框架,而

我正在实现一个自定义用户配置文件屏幕

这几乎是一个典型的用户配置文件屏幕,您可以在大多数具有某种成员资格元素的网站上找到它

在我的例子中,由于屏幕是market research SAS产品的一部分,因此配置文件上显示的数据点将因market research产品而异。产品的主持人将通过提供以下信息来指定需要捕获哪些数据点:

字段名称、显示名称、字段类型(文本、数字、单选按钮、复选框等),必填项

我一直在试图弄清楚如何动态生成MVC视图以反映所请求的数据点列表。我希望尽可能多地使用MVC框架,而不必编写自己的助手来生成html。如果可能的话,我也希望使用不引人注目的验证

在这一点上,我对什么是最好的方法感到困惑

我是否尝试使用:

  • 自定义模型活页夹
  • 代码生成,以在运行时生成模型类并将其绑定到视图
  • 只需生成html

是否有其他更合理的方法(jQuery模板)、编辑器模板、一系列局部视图?

如果您不确定任何给定操作将提交给服务器的内容,您可以让该操作在类型为
FormCollection
的参数中执行,然后遍历字段。此时,您可能希望使用字段的名称作为键,逐个处理每种类型的字段

为了将项目发送到视图,只需将类中每个字段的数据包装起来,如下所示:

public class DataPoint
{
    public string FieldName { get; set; }
    public string DisplayName { get; set; }
    public object Value { get; set; }
}
然后让您的视图迭代您的
数据点
s。
EditorFor()
方法将处理
Value
的类型检查,以生成正确的输入类型。这里唯一另一个棘手的部分是获取
FieldName
作为输入的名称


对于一开始并不太复杂的东西来说,将类构建为运行时将是一项过多的工作。自定义
ModelBinder
对您没有帮助,除非您知道要绑定到的模型,这是问题的根源。

如果您不确定任何给定操作将提交给服务器的内容,您可以让该操作在类型为
FormCollection
的参数中执行,然后遍历字段。此时,您可能希望使用字段的名称作为键,逐个处理每种类型的字段

为了将项目发送到视图,只需将类中每个字段的数据包装起来,如下所示:

public class DataPoint
{
    public string FieldName { get; set; }
    public string DisplayName { get; set; }
    public object Value { get; set; }
}
然后让您的视图迭代您的
数据点
s。
EditorFor()
方法将处理
Value
的类型检查,以生成正确的输入类型。这里唯一另一个棘手的部分是获取
FieldName
作为输入的名称


对于一开始并不太复杂的东西来说,将类构建为运行时将是一项过多的工作。自定义的
ModelBinder
对您没有帮助,除非您知道要绑定到的模型,这是您问题的根源。

您是否可以继续使用命名div括起来的所有字段来布局视图,然后在渲染操作中让控制器添加一个定义为“隐藏”的类

   .hidden
   {
      display:none;
   }
到每个包含不需要的字段的div


另一种选择是编写动态构建视图的HTML扩展方法。您可以为每个控件类型创建局部视图,然后扩展将它们逐个插入到渲染的HtmlString中。

您可以继续使用命名div括起来的所有字段来布局视图,然后在渲染操作中让控制器添加一个定义为“隐藏”的类吗

   .hidden
   {
      display:none;
   }
到每个包含不需要的字段的div


另一种选择是编写动态构建视图的HTML扩展方法。您可以为每个控件类型创建部分视图,然后扩展将它们逐个插入到呈现的HtmlString中。

我已经在一个与您描述的类似的类中创建了数据点。我正试图弄清楚如何将数据点呈现为HTML,以便充分利用javascript不引人注目的验证。我为每个数据点收集了所有相同的信息,就好像我要生成一个模型类代码文件并用数据注释属性装饰属性一样。我已经在一个类似于您所描述的类中收集了数据点。我正试图弄清楚如何将数据点呈现为HTML,以便充分利用javascript不引人注目的验证。我为每个数据点收集了所有相同的信息,就好像我要生成一个模型类代码文件并用数据注释属性装饰属性一样。