• 怎样创建一个.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

    转载请著明本文链接。

  • 相关阅读:
    数据结构与算法之二叉树的遍历
    数据结构与算法之二叉树
    数据结构与算法之单调栈
    数据结构与算法之栈
    C里面的变长参数
    C++模板问题之多出的static
    通过返回值'重载'函数
    flask小记
    ANSI C
    Python坑
  • 原文地址:https://www.cnblogs.com/ysisl/p/1601991.html
Copyright © 2020-2023  润新知