艾伟_转载:学习 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,先在这里,下篇待续。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值