多视图搜索表单(ASP.NET MVC 2)

时间:2011-01-26 17:47:25

标签: asp.net asp.net-mvc

我要求为旅游公司建立一个“搜索”表单。此搜索表单将用于搜索不同的旅行组件,如航班,酒店,汽车等。

表单中的大多数字段对于所有组件都是通用的(例如旅行日期,出发地和目的地城市等),但也包含一些组件特定字段(例如商业/第一/经济舱和不间断飞行指示器航班搜索)。

尽管大多数字段都很常见,但它们需要与特定于组件的标签一起显示...例如:“旅行日期”会在酒店搜索表单上显示“办理登机手续和退房日期”他们会在航班搜索表单上说“出发和返回日期”。

设计搜索表单的最佳方法是使用特定于组件的标签显示字段,还提供了一种将字段映射/关联到组件的方法(所有组件类型的公共字段和相应组件的组件特定字段) ?是否有类似于数据注释的东西来实现这种行为?

1 个答案:

答案 0 :(得分:0)

因此,在“表格A”中,字段1具有特定的显示标签 “表单”包含许多字段,每个字段都有一个按表单更改的显示标签。 表单有一个或多个字段 并非所有表单都需要包含所有字段(即某些表单可能包含的字段数少于所有字段集。)

因此,如果您可以想象数据库中的一组表(这些表中的数据可以缓存在内存中,如果需要)表示此数据,那么在呈现特定表单时,您将获得该集合字段及其显示标签。然后将显示标签绑定到适当的组件就足够了。

这是做到这一点的最佳方式,而不是依赖于反思。

基本数据结构是使用表单名称(或其他标识符)作为键的字典。 Disctionary的“value”部分将是另一个使用控件ID / name作为键的字典,值将是显示标签。

如下所示:

Dictionary<string, Dictionary<string, string>>

或者你可以为后者提供一个“自定义”词典

  公共课   ControlDisplayLabelDictionary:   字典{          }

然后你可以像这样填充整个结构:

  var formControlLabels = new Dictionary<string,
     

ControlDisplayLabelDictionary&GT;();

  var cdForFormA = new ControlDisplayLabelDictionary();

  cdForFormA.Add("Control1", "Travel Dates");
  cdForFormA.Add("Control2", "Some Label control2 on FormA");
  cdForFormA.Add("Control3", "Some Label control3 on FormA");

  formControlLabels.Add("Form A", cdForFormA);

  var cdForFormB = new ControlDisplayLabelDictionary();
  cdForFormA.Add("Control1", "Booking Dates");
  cdForFormA.Add("Control2", "Some Label control2 on FormB");
  cdForFormA.Add("Control3", "Some Label control3 on FormB");

  formControlLabels.Add("Form B", cdForFormA);

当然,当数据来自数据库时,实际的人口代码会有所不同,但这个想法保持不变。现在你可以选择在内存中缓存这个结构,但我不会这样做,除非存在性能问题,因为数据库实际上会将这个“数据”缓存在内存中,并且数据库引擎不太可能会遇到硬盘在第一次之后。当然,您的数据库服务器盒上有足够的内存。