怎样创建一个.NET RIA Services Application (二)

 这段时间比较忙,但还是抽时间把这篇给补完了。下篇主要讲.net RIA Services Domain Class 的数据验证功能和DataForm的插入更新操作,以及用户对操作的访问权限控制。等以后有时间再深入探讨RIA Services的Generator Code运行机制。

1 Employee详细设计

1.1 添加一个DataForm

我们将使用来自SL 3 Toolkit中的 DataForm 控件. 这个是由 Silverlight Business Application Project 模板中自动加入的System.Windows.Controls.Data.DataForm.Toolkit.dll动态库提供, 我们添加这个控件到页面上。

1. 选择EmployeeList.xaml.

2. 向EmployeeList.xaml 添加命名空间引用

xmlns:dataForm="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit" 

3. 添加下面的代码到Xaml.

Code

4. 运行项目点击 employee list 链接. DataForm 显示在DataGrid 中选中的项的详细数据。
其实就是绑定到一个对象上。

clip_image002

2 更新数据库

2.1 更新记录

如果你在新建数据服务模型的时候使用了Enable editing 选项 ,系统会在自动生成服务类中包含各种更新,插入的方法,而在项目中,我们提供按钮使这些方法能被调用。

1. 添加Submit按钮.

 

Code

2. 按钮事件

 

// C# 
private void submitButton_Click(object sender, RoutedEventArgs e) 

     employeeDataSource.SubmitChanges(); 


3. 运行程序,你会发现已经可以更改数据并进行保存了.

2.2 添加客户业务到服务类

1. 在项目中,打开OrganizationService.cs 并建立函数ApproveSabbatical.

 

Code

2. 编译后在提交按钮下再添加一个按钮

 

Code

3. 打开后台代码,添加按钮事件

 

Code

4. 运行并点击ApproveSabbatical 按钮

3 验证

3.1 基本验证

DataForm 控件具有显示来自数据访问层(DAL)错误信息的能力. 例如下图,当输入一个非法值时,会产生比较美观的错误提示.

clip_image004

打开HRApp.web 工程下的OrganizationService.metadata.cs文件,这个是由DomainService类根据实体模型自动生成的 验证扩展类。而为了能让这些验证规则在客户端自动生成,我们需要为这些属性添加验证类型,通常验证类型都是以Attribute的方式添加,共有有下面几种:

  •  CustomValidationAttribute
  •  DataTypeAttribute
  •  RangeAttribute
  •  RegularExpressionAttribute
  •  RequiredAttribute
  •  StringLengthAttribute

1. 打开OrganizationService.metadata.cs文件,添加基本验证.

// C# 
[Required] 
public string Gender; 
[Range(070)] 
public short VacationHours; 

2. 编译项目,并运行(注意要选择直接运行不调试Start Without Debugging)

Note: 因为这种基本数据验证是以异常抛出,调试器会先于程序捕获这种异常,会报错.

3. 运行程序,在VacationHours字段上输入超出范围(0-70)的数据. 你会看到如下图示。当然,Gender字段被设定成Required ,即不能为空。

clip_image006

3.2 自定义验证

1. 在HRApp.web项目中添加一个用户类,命名为OrganizationService.shared.cs.
注意命名规则,这是一个共享类,就是在服务器端和客户端都会使用到,而在客户端会由程序自动生成对应类,这种类必须以shared.cs结尾。

2. 我们在该类中添加下面的代码。

 

Code

3. 打开 OrganizationService.metadata.cs 现在我们可以在字段上添加CustomValidation,将刚才生成的类类型做为参数,验证条件是返回值为ValidationResult类型的函数。

// C# 
[CustomValidation(typeof(HRApp.Web.GenderValidator), "IsGenderValid")] 
[Required] 
public string Gender; 

4. 编译运行,在 employee dataForm 中,输入一个不是 ’M’ 或’F’的非法值.看到验证信息如下。

clip_image008

3.3 添加一条记录

现在我们将创建一个用户接口,用于实现添加新记录到数据库. 当然这其中也包含验证条件

1. 在HRApp项目中添加新项,Silverlight Child Window命名EmployeeRegistrationWindow.xaml.

clip_image010

2. 打开EmployeeRegistrationWindow.xaml.cs 添加命名空间

// C#

using HRApp.Web;

3. 添加属性

// C#

public Employee NewEmployee { get; set; }

4. 打开 EmployeeRegistrationWindow.xaml.

5. 隐藏ChildWindow 窗口的关闭按钮.

<controls:ChildWindow x:Class="HRApp.EmployeeRegistrationWindow" 
… 
Width="400" Height="300" 
Title="EmployeeRegistrationWindow" HasCloseButton="False"> 

6. 我们制作对象详细视图,需要使用 System.Windows.Controls.Data.DataForm.Toolkit 中的控件,这在Sivlerlight Business Project 模板中已经为我们引入了,在Libs目录下。我们添加引用集后就可以直接使用DataForm了。

xmlns:dataForm="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit" 

7. 向EmployeeRegistrationWindow.xaml添加 DataForm,放在取消按钮上面。

 

Code

8. 打开EmployeeRegistrationWindow.xaml.cs :

 

Code

9.  打开 EmployeeList.xaml.

10. 添加一个按钮叫‘addNewEmployee 放置在 DataPagerDataForm 中间

Code

11. 打开 EmployeeList.xaml.cs.

12. 添加按钮事件

 

Code

13. 为EmployeeRegistrationWindow定义窗口关闭事件

 

Code

14. 打开OrganizationService.cs.

15. 添加下面的代码

 

Code

16. 直接运行程序(Start Without Debugging )

17. 点击链接employee.
点击添加按钮,你可以添加employee , 并且因为使用了DataForm控件,原先的关于实体的所有字段都会应用验证提示。

clip_image012

4 授权

4.1 授权

1. 打开 OrganizationService.cs

2. 在需要添加权限设置的方法ApproveSabbatical添加 RequiresAuthentication 属性。这样就保证在服务器端只有符合权限的用户才能调用此方法。如果匿名用户点击了ApproveSabbatical 按钮,方法将不被执行。

[RequiresAuthentication()] 
public void ApproveSabbatical(Employee current) 

     
this.Context.Attach(current); 
     current.CurrentFlag = false
     
this.Context.SaveChanges(); 
}

3. 打开 EmployeeList.xaml.cs,添加下面的命名空间。

using System.Windows.Ria.ApplicationServices; 

4. 当然,我们也可以在客户端进行身份验证,修改 approveSabbatical_Click 方法

确保只有登入的用户才能点击按钮,没有登录的要先进行登录操作。

 

Code

5. 运行程序。

6. 浏览employee 记录并点击‘Approve Sabbatical’ 按钮,会弹出登录窗口。

7. 输入帐号或者注册。
登录完成后我们可以点击按钮,实现其相关功能。

clip_image014

5 结束

本文由双宇翻译。原项目及文档地址

http://go.microsoft.com/fwlink/?LinkId=145481

 

转载请著明本文链接。

posted on 2009-11-12 17:22  双宇  阅读(2696)  评论(1编辑  收藏  举报