动态构建视图模型并应用UI验证,Asp.Net MVC 5

时间:2015-08-01 00:33:07

标签: asp.net-mvc

在我的应用程序中,基于UI上的字段选择,我在UI上加载要从数据库显示的字段列表。根据选择,在数据库中配置每个字段都是必需的在构建UI之后,我会对相同的视图模型发布帖子(在控制器操作中)。

这样做的最佳方式是什么?

我考虑过使用反射并在属性上添加基于IsRequired标志的属性来对照数据库中的每个字段,但我想我必须从UI中消除不需要的字段。

那么我应该创建一个如下的类作为最佳选择,还是我还有别的东西?

Public Class ViewModelTicket
{
   Public string EmailAddress{get;set}
   Public bool IsRequired{get;set}
   Public bool ShouldDisplay{get;set}

}

并在View上抛出一堆if else语句?

由于

1 个答案:

答案 0 :(得分:1)

我会选择你开始的,但我会把它放在一个集合中,这样你的模型就是一个集合,或者是你开始使用的那个类的集合。这样,您可以轻松扩展模型以获得更多字段。

<强>更新 我仍然认为您可以使用该集合来消除模型中ShouldDisplay的需要,并且您的集合将只包含您想要显示或获取输入的字段。

或者,您可以将ShouldDisplay值放在包含div的类中。

所以你认为会有类似的东西:

<div class="show-@Model.ShouldDisplay">
     @Html.LabelFor(m => m.EmailAddress) 
     @Html.TextBoxFor(m => m.EmailAddress) 
</div>

哪个需要这个css:

.show-false { display: none; }

对于IsRequired,您可以在模型中使用类似RequiredIfTrue属性的内容。

所以你的模型将是:

Public Class ViewModelTicket
{
   [RequiredIfTrue(IsRequired)]
   Public string EmailAddress{get;set}
   Public bool IsRequired{get;set}
   Public bool ShouldDisplay{get;set}
}