ASP.NET MVC“.NET技术” 入门介绍 (下)

简介:   相关文章:ASP.NET MVC 入门介绍 (上)  接上文,我们来完善验证功能。在System.ComponentModel.DataAnnotations命名空间中,已经有了一些基本的属性类来实现验证功能,只要把这些属性加到Model的字段上就可以了。

  相关文章:ASP.NET MVC 入门介绍 (上)

  接上文,我们来完善验证功能。在System.ComponentModel.DataAnnotations命名空间中,已经有了一些基本的属性类来实现验证功能,只要把这些属性加到Model的字段上就可以了。具体的属性类可以查MSDN, 下面给出一个例子:

 
 
public class Movie
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get ; set ; }
[StringLength(
10 ,MinimumLength = 2 ,ErrorMessage = " 必须是2~10个字符长 " ),Required,Display(Name = " 名称 " )]
public string Title { get ; set ; }
[Display(Name
= " 发布日期 " )]
public DateTime ReleaseDate { get ; set ; }
public string Genre { get ; set ; }
[Range(
1 , 100 ,ErrorMessage = " 必须是1~100 " )]
public decimal Price { get ; set ; }
public string Rating { get ; set ; }
}

  再运行下程序,就可以看到效果:

image

  当然,默认的验证往往并不足够,可以尝试下将日期改为201-01-1,点击Create,就会引发异常。我们可以增加自定义的验证属性来满足验证要求。下面我们来实现一个DateAttribute属性来实现日期格式和日期范围的检查。新建一个动态链接库Biz.Web,添加System.ComponentModel.DataAnnotations引用,新建一个类如下:

 
 
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.SqlClient;

namespace Biz.Web
{
[AttributeUsage(AttributeTargets.Property
| AttributeTargets.Field, AllowMultiple = false )]
public class DateAttribute:ValidationAttribute
{
public DateAttribute()
{
// set default max and min time according to sqlserver datetime type
MinDate = new DateTime( 1753 , 1 , 1 ).ToString();
MaxDate
= new DateTime( 9999 , 12 , 31 ).ToString();
}

public string MinDate
{
get ;
set ;
}

public string MaxDate
{
get ;
set ;
}

private DateTime minDate, maxDate;
// indicate if the format of the input is really a datetime
private bool isFormatError = true ;

public override bool IsValid( object value)
{
// ignore it if no value
if (value == null || string .IsNullOrEmpty(value.ToString()))
return true ;
// begin check
string s = value.ToString();
minDate
= DateTime.Parse(MinDate);
maxDate
= DateTime.Parse(MaxDate);
bool result = true ;
try
{
DateTime date
= DateTime.Parse(s);
isFormatError
= false ;
if (date > maxDate || date < minDate)
result
= false ;
}
catch (Exception)
{
result
= false ;
}
return result;
}

public override string FormatErrorMessage( string name)
{
if (isFormatError)
return " 请输入合法的日期 " ;
return base .FormatErrorMessage(name);
}
}
}

  主要实现IsValid方法,如有需要也可以实现FormatErrorMessage方法。要注意属性的参数只能是有限的几种类型,参考这里。写好以后,把HelloWorld项目添加Biz.Web引用,然后就可以使用了,例如:

 
 
[Display(Name = " 发布日期 " ),Date(MaxDate = " 2012-01-01 " ,ErrorMessage = " 2012地球灭亡啦 " )]
public DateTime ReleaseDate { get ; set ; }

  看下效果:

image  当然,这种方式有许多限制,主要是属性参数的限制,只能是基本类型,而且只能是常量。更复杂的验证规则的添加请看这里:

  Implement Remote Validation in ASP.NET MVC.

  下面为lndex页面加上一些筛选功能。通过给Index传递参数来实现筛选,在页面添加一个selectbox来筛选Genre字段,把MovieController的方法改成:

 
 
public ViewResult Index( string movieGenre)
{
var genre
= (from s in db.Movies
orderby s.Genre
select s.Genre).Distinct();
ViewBag.MovieGenre
= new SelectList(genre); // 给前台准备下拉列表的数据。
if ( ! string .IsNullOrEmpty(movieGenre))
{
// 筛选
var movies = from s in db.Movies where s.Genre == movieGenre select s;
return View(movies);
}
return View(db.Movies.ToList());
}

  在View页面,添加一个Form,里面放上一个选择框和一个按钮,代码如下:

 
 
@using (Html.BeginForm( " Index " , " Movie " , FormMethod.Get))
{
< p > Genre: @Html.DropDownList( " MovieGenre " , " 全部 " ) < input type = " submit " value = " 筛选 " /></ p >
}

  效果如下:

image

目录
相关文章
|
28天前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
27天前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
27天前
|
数据可视化 NoSQL C#
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
|
28天前
|
设计模式 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
|
2月前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
55 1
|
2月前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
137 12
|
2月前
|
人工智能 前端开发 Devops
.NET技术自发布以来,在软件开发领域发挥了重要作用
【9月更文挑战第12天】.NET技术自发布以来,在软件开发领域发挥了重要作用。本文分为三部分探讨其在现代开发中的应用:首先介绍.NET的核心价值,包括语言多样性、强大的开发工具支持、丰富的类库、跨平台能力和活跃的社区;接着分析其在企业级应用、Web开发、移动应用、云服务及游戏开发中的实际应用;最后讨论.NET面临的挑战与未来趋势,如性能优化、容器化、AI集成及跨平台框架竞争等。通过不断的技术创新和社区驱动,.NET将持续推动软件开发的进步。
39 4
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
人工智能 开发框架 算法
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
|
2月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
63 7