Asp.Net MVC模型验证结构



我正在创建一个Asp.Net MVC应用程序,该应用程序针对我们仓库中使用的小型坚固手持设备。因为屏幕很小,我们最终会有很多过程,在我们真正对信息采取行动之前,我们会带用户通过几个输入信息的屏幕。例如,如果他们想创建库存,我们将有一个屏幕询问他们的位置和项目编号信息,第二个屏幕询问批次跟踪信息,然后第三个屏幕询问数量信息。在他们点击第三个屏幕上的回车键后,我们将获取所有信息并创建库存交易。

我正在努力解决如何通过模型和验证来正确构建这一问题。我想在每个屏幕上向用户提供验证信息。以下是我尝试过的方法:

--为整个过程提供一个模型和视图。每个屏幕都是视图中的一个DIV,我使用JavaScript来隐藏和显示DIV。我创建了自定义验证属性,用于模型中的属性以提供验证。然后,我使用JQuery远程验证来进行验证cliet端,因此在切换到下一个DIV之前,我确保当前DIV上的字段是有效的。这种方法的问题是手持设备功能不强大,也没有最好的web浏览器,因此远程验证最终不可靠。

--为每个页面提供不同的视图,并为每个页面创建不同的模型。我再次使用自定义验证属性来进行验证。这种方法效果很好,只是我最终得到了大量非常相似的不同模型。

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

我觉得我提出的这三种方法中的每一种都有重大问题。有更好的处理方法吗?

您是否考虑过创建一个包含每个步骤的所有数据的ViewModel(无验证),但也为每个步骤创建ViewModel,其中包含与该步骤相关的字段(和验证),以及包含所有数据的View Model实例。例如:

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;}
}

使用一个模型来描述数据及其与数据库的关系。使用映射到视图以及用户实际交互内容的ViewModels。

什么是视图模型?

最新更新