asp.net MVC 验证错误信息本地化

简介: asp.net MVC 提供了模型验证的快捷方式,我在上一篇博客中有专门提到模型验证的类型以及如何自定义验证,这次我们来探讨一下模型验证信息如何本地化,活着直白点说如何在不同语言中显示不同的错误信息。 咱们先来说一下,不采用资源文件,我们如何处理错误信息的。

asp.net MVC 提供了模型验证的快捷方式,我在上一篇博客中有专门提到模型验证的类型以及如何自定义验证,这次我们来探讨一下模型验证信息如何本地化,活着直白点说如何在不同语言中显示不同的错误信息。

咱们先来说一下,不采用资源文件,我们如何处理错误信息的。

首先我们定义UserModel 领域模型类

1     public class UserModel
2     {
3         [Required(ErrorMessage="用户名不能为空")]
4         public string UserName { get; set; }
5 
6         [Required(ErrorMessage="密码不能为空")]
7         [DataType(DataType.Password)]
8         public string Password { get; set; }
9     }

领域模型类很简单,就是定义了两个属性,用户名和密码,然后验证他们是必填项。

我们在View层,采用简单的方式来显示这个领域模型,因为不涉及到具体的逻辑,所以我们一切从简。

 1 @{
 2     Layout = "~/views/shared/_layout.cshtml";
 3 }
 4 @model MvcWeb.Models.UserModel
 5 <!DOCTYPE html>
 6 <html>
 7 <head>
 8     <title>Index</title>
 9     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
10     <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
11     <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
12 </head>
13 <body>
14     @using (Html.BeginForm())
15     {
16         @Html.EditorForModel()
17         <input type="submit" value="提交" />
18     }
19 </body>
20 </html>

这些是初学者都很熟悉的一些操作,当然我们今天的重点不是这个,是通过资源文件来动态的显示不同区域的错误信息。下面我们来看一下错误信息显示。

从上面的错误信息显示中,我们可以看出,错误信息是可以正确显示,但是也有一些问题,比如说错误信息是硬编码的,不能动态的更改,也不能适应不同区域显示。下面我们通过资源文件来更改错误信息的显示,虽然说这个功能点如果知道了会很简单,但是确实如果自己摸索的话,还真是要费一点功夫的,我也是看了好几个小时也才慢慢熟悉。

下面我们来新建一个资源文件,首先我们添加一个目录 叫做Resources,在里面添加一个资源文件,Resource1.resx,请注意:我们不能添加了resource.en-us.resx 和resource.zh-cn.resx 两个资源文件,而没有resource.resx文件,这样的话 在代码中是看不到resource这个资源类的,所以请注意一下。添加了resource1.resx 和resource1.en-us.resx 两个资源文件,并且添加一个Name key 和用户名不能为空以及User Name required,这两个值是在两个文件中的。

现在我们在Model中更改错误信息的显示。

1   public class UserModel
2     {
3         [Required(ErrorMessageResourceName = "Name", ErrorMessageResourceType = typeof(Resources.Resource1))]
4         public string UserName { get; set; }
5 
6         [Required(ErrorMessage = "密码不能为空")]
7         [DataType(DataType.Password)]
8         public string Password { get; set; }
9     }

请注意ErrorMessageResourceName 表示的是资源文件中的key,而后面的type就是表示的资源类。

前台代码不变,我们调试一下,查看结果。

这是在中文环境中的显示结果,我们可以通过浏览器的语言选项,来更改默认的区域,但是可能我的ie版本是10.0,更改了语言选项,没有看到更改为英文,所以我直接在前台更改线程的区域。

 1 @{
 2     Layout = "~/views/shared/_layout.cshtml";
 3 }
 4 @model MvcWeb.Models.UserModel
 5 <!DOCTYPE html>
 6 <html>
 7 <head>
 8     <title>Index</title>
 9     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
10     <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
11     <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
12 </head>
13 <body>
14 @{
15     Html.EnableClientValidation();
16     System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
17 
18     System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-us");
19     }
20     @using (Html.BeginForm())
21     {
22         @Html.EditorForModel()
23         <input type="submit" value="提交" />
24     }
25 </body>
26 </html>

注意我更改了线程的Culture,现在我们再来查看一下效果。有图有真相

语言显示了英文。这个功能点本身没有什么特别的,我在这里提出来只是为了说明在MVC中如何使用资源文件实现多语言。这是过年前的博客,肯定不是最后一篇,最近公司要用到wcf,以前都是用web 服务,现在用wcf,一切都是初学者,幸好我功底深厚,学习起来还算比较顺利。有机会和大家分享一下咱学习wcf的过程。

 

我又回来了,回到了技术最前线,
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
49 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
194 0
|
5月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
158 0
|
4月前
|
开发框架 JSON .NET
|
5月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
81 0
|
6月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
347 5
|
6月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
|
6月前
|
开发框架 JavaScript .NET
Asp.Net就业课之三验证控件
Asp.Net就业课之三验证控件
72 0