艾伟_转载:学习 ASP.NET MVC (第二回)实战篇

简介: 本系列文章导航学习 ASP.NET MVC (第一回)理论篇学习 ASP.NET MVC (第二回)实战篇学习 ASP.NET MVC (第三回)实战篇学习 ASP.NET MVC (第四回)实战篇学习 ASP.NET MVC (第五回)理论篇 上篇简单的了解了ASP.NET MVC的基本概念和基本流程,接下来的几篇将通过简单的实例,来看看如何通过ASP.NET MVC创建应用程序。

本系列文章导航

学习 ASP.NET MVC (第一回)理论篇

学习 ASP.NET MVC (第二回)实战篇

学习 ASP.NET MVC (第三回)实战篇

学习 ASP.NET MVC (第四回)实战篇

学习 ASP.NET MVC (第五回)理论篇

上篇简单的了解了ASP.NET MVC的基本概念和基本流程,接下来的几篇将通过简单的实例,来看看如何通过ASP.NET MVC创建应用程序。Demo很简单也很基础,高手绕过。
  闲话少说,直接进入正题。首先我们要做的就是安装ASP.NET 1.0。大家可以到CodePlex上下载。
  然后我们用VS2008创建新的ASP.NET MVC项目:

点击确定后,会提示是否创建一个测试项目,点击ok即可。

在解决方案中,我们就可以看到ASP.NET MVC给我们创建的好的模板:

默认情况下:
Controls – 放置 Controller 类,处理 URL 请求。
Models – 放置业务实体类,表示和操作数据。
Views – 放置 UI 模板文件,负责展示输出结果。
Scripts – 放置 Javascript 类库文件和.js 文件。
Contents – 放置 CSS 和图像文件,以及其他非动态的、非 Javascript 文件。
App_Data – 放置数据库文件。
ASP.NET MVC 应用程序不是必须要求这样的目录结构。事实上,大型系统的开发人员通常会将应用程序分为多个项目文件,这样是项目更易于管理(如,数据 Model 类通常在一个单独的类库项目中)。默认的项目结构提供了常规的目录结构,用来保存应用程序更加清晰。
直接运行现有的项目:

当我们点击log on:
http://localhost/:端口号/{控制器名}/{Action方法名}

有个叫Account的Controller,有个叫LogOn的Action。这样就请求了登陆页面:

创建数据库

这里简单的创建一个User表,用来存储用户的信息。向表中添加一些数据。
创建 Model 模型
在 Model-View-Controller 框架中,Model表示应用程序的数据对象,以及相应的业务领域逻辑,包括数据验证和业务规则。Model是 MVC 应用程序的核心部分,下面我们会看到 Model的作用。ASP.NET MVC 框架支持使用任意数据访问技术,开发人员可以选择大量的.NET 数据访问技术实现 Model。这里我们选择LINQ to SQL的方式来实现对数据的访问。
增加LINQ to SQL 类到项目程序中:在Model文件夹上右键--添加新项:

将User表手动拽到管理器中:

接下来我们就可以利用Linq来对数据库进行操作。我们创建一个UserRepository.cs,封装对User的增加,删除,修改的操作。

Code
namespace UserInfo.Models
{
    
public class UserRepository
    {
        
private UserDataContext db = new UserDataContext();
        
//查询
        public IQueryable<Users> FindUsers()
        {
            
return db.Users;
        }

        
public Users GetUsers(int id)
        {
            
return db.Users.SingleOrDefault(d => d.UserID == id);
        }

        
//插入,删除
        public void AddUser(Users user)
        {
            db.Users.InsertOnSubmit(user);
        }
        
public void DelUser(Users user)
        {
            db.Users.DeleteOnSubmit(user);
        }

        
//更新
        public void SaveUser()
        {
            db.SubmitChanges();
        }
    }
}

Model 类集成验证和业务规则逻辑
项目中我们常常会有业务的验证和业务的逻辑规则,比如不允许用户输入的信息为空之类的,我们在Model文件夹中添加Users.cs。来对User进行验证:

Code
namespace UserInfo.Models
{
    
public partial class Users
    {
        
public bool IsValid
        {
            
get { return (GetRuleViolations().Count() == 0); }
        }

        
public IEnumerable<RuleViolation> GetRuleViolations()
        {
            
if (String.IsNullOrEmpty(UserName))
                
yield return new RuleViolation("名称不能为空""UserName");
            
if (String.IsNullOrEmpty(Sex))
                
yield return new RuleViolation("性别不能为空""Sex");
            
if (String.IsNullOrEmpty(Tel))
                
yield return new RuleViolation("电话不能为空""Tel");
            
if (String.IsNullOrEmpty(BirthPlace))
                
yield return new RuleViolation("出生地不能为空""BirthPlace");
            
if (String.IsNullOrEmpty(Company))
                
yield return new RuleViolation("工作单位不能为空""Company");
            
if (String.IsNullOrEmpty(Contact))
                
yield return new RuleViolation("联系方式不能为空""Contact");

            
yield break;
        }

        
partial void OnValidate(ChangeAction action)
        {
            
if (!IsValid)
            {
                
throw new ApplicationException("处罚规则");
            }
        }
    }

    
public class RuleViolation
    {
        
public string ErrorMessage { getprivate set; }
        
public string PropertyName { getprivate set; }
        
public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage 
= errorMessage;
            PropertyName 
= propertyName;
        }
    }
}

这里有几点值得注意:
我们直接对 Users模型类公开 IsValid 属性和GetRuleViolations() 方法,IsValid 属性根据验证和业务规则返回 true 或 false,GetRuleViolations() 则返回
所有错误的业务逻辑列表。
我们将class 定义为Partial 到项目中,来实现 IsValid 和 GetRuleViolations()方法。Partial 类用来增加方法/属性/事件到 VS 设计器生成的类中(如 LINQ to SQL 设计器生成的 Users类),有助于区分我们编写的代码。
这里,我们使用 C#的 yield return 特性,返回有序的 RuleViolation 集合。
yield return 语句返回集合的一个元素,并移动到下一个元素上。yield break 可停止迭代。包含 yield 语句的方法或属性也称为迭代块。迭代块必须声明为返回 IEnumerator 或 IEnumerable 接口。这个块可以包含多个 yield return 语句或 yield break 语句,但不能包含 return 语句。
当然这里只是简单的进行数据的验证。
到这里,我们就基本上对Users的Model的编写就基本的完成了。
ok,先在这里,下篇待续。

目录
相关文章
|
8月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
341 0
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
这篇文章是关于计算机组成原理的王道考研学习笔记,主要介绍了半导体存储器RAM和ROM的相关知识。
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
|
10月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
170 7
|
9月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
750 0
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【文献学习】Phase-Aware Speech Enhancement with Deep Complex U-Net
文章介绍了Deep Complex U-Net模型,用于复数值的语音增强,提出了新的极坐标掩码方法和wSDR损失函数,并通过多种评估指标验证了其性能。
151 1
|
10月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
183 0
|
11月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
133 0
|
11月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
211 0
|
11月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
339 0
|
11月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
219 0