繁体   English   中英

Asp.Net MVC模型验证结构

[英]Asp.Net MVC Model Validation Structure

我正在创建一个Asp.Net MVC应用程序,该应用程序针对在我们的仓库中使用的小型坚固手持设备。 因为屏幕很小,所以最终会有很多过程,在这些过程中,我们将实际操作信息之前,先引导用户进入几个输入信息的屏幕。 例如,如果他们要创建库存,我们将有一个屏幕询问他们的位置和物料编号信息,第二个屏幕询问批次跟踪信息,然后第三个屏幕询问数量信息。 当他们在第三个屏幕上按Enter键后,我们将获取所有信息并创建库存交易。

我正在努力使用模型和验证来正确地构建此结构。 我想在每个屏幕上向用户提供验证信息。 这是我尝试过的方法:

-拥有一个模型并查看整个过程。 每个屏幕在视图中都是DIV,我使用JavaScript隐藏和显示DIV。 我创建了自定义的验证属性,该属性用于模型中的属性以提供验证。 然后,我使用JQuery远程验证执行验证清单,因此在切换到下一个DIV之前,请确保当前DIV上的字段有效。 我用这种方法遇到的问题是,手持设备并不真正强大,并且没有最好的Web浏览器,因此远程验证最终变得不可靠。

-每个页面都有不同的视图,并且每个页面都有不同的模型。 再次,我使用自定义的Validation Attributes进行验证。 这种方法行之有效,只是我最终得到了很多非常相似的不同模型。

-每个页面都有不同的视图,并在所有页面上使用一个模型。 对于这种方法,我无法使用“验证属性”进行验证,因为如果我在模型上确定了数量(最后一页上的字段),那么它将抛出错误,指出第一页上是必需的。 因此,我最终不得不在我不喜欢的控制器中进行验证。

我觉得我提出的这三种方法都存在重大问题。 有没有更好的方法来解决这个问题?

您是否考虑过创建一个包含每个步骤的所有数据的ViewModel(不进行验证),还考虑过为每个步骤创建一个包含与该步骤相关的字段(和验证)的ViewModels,以及一个包含所有步骤的ViewModel实例数据。 因此,例如:

 public class EntireProcessModel {
      public string data1 {get; set;}
      public double data2 {get; set;}
 }

 public class Step1ViewModel {
      [Required]
      public string FieldForData1 {get; set;}
      public EntireProcessViewModel EpVm {get; set;}

 }
 public class Step2ViewModel {
      [Required]
      public string FieldForData2 {get; set;}
      public EntireProcessViewModel EpVm {get; set;}

 }

使用一种描述您的数据及其与数据库的关系的模型。 使用可映射到视图以及用户实际与之交互的ViewModel。

什么是视图模型?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM