asp.net-mvc – 在ASP.NET MVC中对ViewModels进行验证
|
关于如何在ASP.NET MVC中实现验证的大多数提示似乎围绕着Model(在模型和控制器之间构建服务层或者用验证属性来装饰模型的属性)。 在我的应用程序中,我使用ViewModel控制器和视图之间的所有通信。 我有一个名为“LoginViewModel”的登录页面的ViewModel,其名称为“EmailAddress”。 当用户输入他们的电子邮件地址并点击提交时,此ViewModel将被填充并发送到控制器,该电子邮件地址已被验证。 它必须是有效的电子邮件地址,用户必须来自在系统上注册的域。 什么是一种方便的方法来添加验证?我应该将验证放在ViewModel本身吗?还是应该留在控制器? 解决方法“我应该将验证放在ViewModel本身吗?还是应该留在控制器”我同意罗伯特,但我会添加一个插件来进行额外的自动化。如果您查看诸如xVal之类的工具,可以通过装饰数据类的字段来自动执行例行验证(例如,必需字段,范围内的数字,匹配正则表达式的字符串)。实际上,xVal可以自动编写JavaScript进行常规验证,以便客户端进行。所有没有写任何代码。更深入的验证(例如,该用户是在我们的数据库中注册的域的成员)发生在模型层本身的服务器端。 使用ViewModel成语可能会给这个方案带来一些挑战。我目前的方法是将我的实体对象嵌入到我的视图模型中,例如 public class Contact {
[Required]
string Name { get; set; }
}
public class ContactView {
public Contact Contact { get; set; }
public string SomeOtherViewProperty { get; set; }
}
然后在控制器中,更新模型时会发生浅层验证: UpdateModel(contactViewModel.Contact,"Contact"); 并且需要更多信息或更复杂计算的验证发生在模型层本身内。 另一种方法是不要嵌入实体对象,而只需映射两者之间的各个字段。我最近知道一个名为AutoMapper的工具,它自动链接域和视图模型对象之间的字段。它似乎应该支持这种验证方法,虽然我还没有使用它。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net4.0中的ClientIDMode
- 将ASP.NET成员资格表添加到我自己的现有数据库中,还是应该配
- asp.net – 数据注释 – 使用属性扩展并在资源文件中存储正
- asp.net-mvc – Razor视图引擎2.x中有什么新功能?
- asp.net-mvc – 为什么UserManager.CreateIdentityAsync()正
- asp.net – Web api界面在本地工作,但不在Azure上
- asp.net – 在更新面板中自动上传文件到服务器第一次不起作
- ASP.NET中的c# – die()或exit()功能
- asp.net-mvc-3 – mvc3 – 在不同的区域使用部分视图
- asp.net – 与WCF和其他Web服务有什么区别?
- asp.net-web-api2 – SwashBuckle / Swagger –
- 为Asp.Net MVC中的特定Controller或Action启用SS
- asp.net – Visual Studio加载项自动附加到Devel
- asp.net-mvc – 为什么我得到一个“无法更新Enti
- asp.net-mvc-5 – 使用MVC属性路由的每个控制器的
- asp.net-mvc – LINQ to SQL分页和COUNT(*)
- asp.net-mvc – 如何在不同的控制器中管理MVC区域
- asp.net-core – 如何在asp.net 5类库nuget包中包
- 实体框架 – 对ASP.NET MVC Onion架构的意见
- asp.net-mvc – ASP.NET MVC视图模型命名约定
