• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

让我们的ASP.NET MVC应用可以单独维护验证消息

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在项目开发中,我们会使用到很多的描述性文字,比如验证消息、错误消息和确认消息等,让这些文本消息具有可维护性具有重要的意义。虽然我们可以将它们存储于资源文件中,并且ASP.NET的ValidationAttribute也对这种方式提供了原生的支持。但是资源文件的每个条目仅仅是简单的键-值对,只能存储消息的文本值而已,在我们的项目开发中使用的是专门的一个维护消息的组件。在这篇文章中将会通过扩展现有的ValidationAttribute特性让ASP.NET MVC应用可以使用我们的消息组件来获取验证消息。[源代码从这里下载]

我们通过如下一个MessageManager来模拟我们独立的消息组件。简单起见,我们通过一个静态字典来维护所有的消息,Key和Value分别代表消息的Id和文本值。从如下的代码可以看出,消息文本可以支持{0}、{1}、…形式表示站位符。GetMessage方法根据指定的消息ID和替换站位符的对象数组格式化一个完成得消息文本。

class MessageManager
   2: {
string>();
static MessageManager()
   5:     {
);
);
);
   9:     }
object[] args)
  11:     {
string.Format(CultureInfo.CurrentCulture, messages[messageId], args);
  13:     }
new MessageManager();
  15: }

通过直接继承ValidationAttribute的方式,我们定义了如下一个ExtendedValidationAttribute。我们仅仅定义了一个将消息ID和替换站位符的对象数组作为参数的构造函数,而该构造函数直接调用基类包含Func<string>参数的构造函数。至于用于获取验证消息Func<string>对象,则使用调用MessageManager的GetMessage方法来构建。

class ExtendedValidationAttribute : ValidationAttribute 
   2: { 
object[] args):
base(()=>MessageManager.Current.GetMessage(messageId,args))
   5:     {           
   6:     }
   7: }

二、扩展的RequiredAttribute和RangeAttribute

接下来我们来演示如何定义具体的ValidationAttribute,我们以用于验证必需字段/属性和值范围的RequiredAttribute和RangeAttribute为例。下面是我们自定义的RequiredAttribute和RangeAttribute,这里使用了一个比较讨巧的方式:直接调用System.ComponentModel.DataAnnotations.RequiredAttribute和System.ComponentModel.DataAnnotations.RangeAttribute的IsValid方法来实施验证。

false)]
class RequiredAttribute : ExtendedValidationAttribute
   3: {
bool AllowEmptyStrings { get; set; }
object[] args) :
base(messageId,args)
   7:     {}
value)
   9:     {
value);
  11:     }
  12: }
  13:  
false)]
class RangeAttribute : ExtendedValidationAttribute
  16: {
private System.ComponentModel.DataAnnotations.RangeAttribute innerRangeAttribute;
  18:  
object[] args) :
base(messageId, args)
  21:     {
new System.ComponentModel.DataAnnotations.RangeAttribute(minimum, maximum);
  23:     }
  24:  
object[] args):  
base(messageId, args)
  27:     {
new System.ComponentModel.DataAnnotations.RangeAttribute(minimum, maximum);
  29:     }
  30:  
object[] args) :
base(messageId, args)
  33:     {
new System.ComponentModel.DataAnnotations.RangeAttribute(type, minimum, maximum);
  35:     }
  36:  
value)
  38:     {
value);
  40:     }
  41: }

三、实例演示

接下来我们来演示上面定义的两个验证特性在ASP.NET MVC项目中的应用。我们先定义如下一个实体类型Person,RequiredAttribute和RangeAttribute分别应用在表示名字、年龄和体重的Name、Age和Weight三个属性上。具体的验证规则是:名称是必需的,年龄必须大于18周岁而体重不得终于160斤。表示验证消息的ID和站位符对象数组作了相应的设置。

class Person
   2: {
)]
string Name { get; set; }
,18)]
int Age { get; set; }
, 160)]
double Weight { get; set; }
   9: }

在创建的ASP.NET MVC项目中添加下一个HomeController。

class HomeController : Controller
   2: {        
public ActionResult Index()
   4:     {
, Age = 24, Weight = 120 });
   6:     }
   7:  
   8:     [HttpPost]
public ActionResult Index(Person person)
  10:     {
this.ModelState.IsValid)
  12:         {
new NotImplementedException();
  14:         }
return View();
  16:     }
  17: }

Index.cshtml的内容如下所示,这是一个以Person对象作为Model的View。具体来说,这个View用于对Person对象三个属性的修改。

   1: @model Artech.Web.Mvc.Extensions.Person
   2:  
   3: @{
;
   5: }
   6:  
   7: <h2>Index</h2>
using (Html.BeginForm())
   9: {
  10: @Html.EditorForModel()
 />
  12: }

运行我们的程序,如果输入的内容不符合定义在Person类型上的验证规则,相应的验证消息会被现实,而这些消息都是通过MessageManager来获取的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETAJAX发布时间:2022-07-10
下一篇:
Asp.net Mvc Framework 二 (URL Routing初解)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap