创建控制器
控制器将会用到 Microsoft.Web.Mvc.Build.dll和Microsoft.Web.Mvc.dll中的类。因此在编译应用程序之前,应检查上述两个动态库已经在你的bin文件夹下。
对于增加、编辑、删除和查看员工职责详细信息等操作,我已经在我的HomeController中增加了“Get”和“Post”函数。控制器中的每一个函数都被关联到一个视图(.ASPX页面),例如为了查看员工列表,我编写了“Index”函数来返回员工列表信息,该信息将被显示在名为“Index.aspx”的视图中。要想显示某个特定员工的数据,则会调用Details函数。
Function Details(ByVal id As Integer) As ActionResult Dim objEditEmployee = (From c In objDatabaseEntities.EmployeeSet Where c.EmployeeId = id Select c).FirstOrDefault() Return View(objEditEmployee) End Function LINQ
被用来查询业务对象和从Employee List模型中查找某个特定员工。通过使用“Return View”,这个员工对象将被发回到相应的视图。至于创建一个新员工,我也为“Create”方法创建了“Get”和“Post”两个版本。该方法的Get版将重定向到一个空白Employee页面/视图,由用户来输入员工详细信息,而Post版的“Create”函数将使用我们之前创建的Employee Model对象保存数据库中的员工详细信息。

图6
我对Create.aspx页面中的所有输入字段都添加了合适的客户端验证代码。如果新输入的员工姓名已经存在,则数据不会被插入到数据库中。
Function Create(ByVal objEmployee As Employee) As ActionResult Try Dim objExtEmployee = (From c In objDatabaseEntities.EmployeeSet Where c.EmployeeName = objEmployee.EmployeeName Select c).FirstOrDefault() If objExtEmployee Is Nothing Then objDatabaseEntities.AddToEmployeeSet(objEmployee) objDatabaseEntities.SaveChanges() Return RedirectToAction("Index") End If Catch Return View() End Try Return RedirectToAction("Index") End Function
对于编辑员工详细信息,我也创建“Get”和“Post”版的Edit函数,不过我在HomeController本身中增加了验证机制。如果验证失败的话,我会使用Modelstate.Addmodelerror()函数来向相应视图抛出一个错误信息。
Protected Sub ValidateContact(ByVal EmployeeToValidate As Employee) If EmployeeToValidate.EmployeeName.Trim().Length = 0 Then ModelState.AddModelError("Employee Name", "Employee name is required field.") End If If EmployeeToValidate.EmployeeId.ToString().Trim().Length = 0 Then ModelState.AddModelError("Employee Id", "Employee Id is required field.") End If If (EmployeeToValidate.Department.Length = 0) Then ModelState.AddModelError("Employee Department", "Employee Department is required field.") End If If (EmployeeToValidate.EmployeeSalary.ToString().Length = 0) Then ModelState.AddModelError("Employee Salary", "Employee Salary is required field.") End If If (EmployeeToValidate.Age.ToString().Length = 0) Then ModelState.AddModelError("Employee Age", "Employee Age is required field.") End If If (EmployeeToValidate.Skillset.ToString().Length = 0) Then ModelState.AddModelError("Employee Skillset", "Employee Skillset is required field.") End If If (EmployeeToValidate.Skillset.ToString().Length = 0) Then ModelState.AddModelError("Employee Role", "Employee Role is required field.") End If End Sub
在删除员工列表方面,我只增加了一个Get版,并在视图中增加了必要的JavaScript验证代码(确认信息)。
创建视图
在一个ASP.NET MVC应用中,所有入站的浏览器请求都被映射到控制器行为上。控制器行为可能会返回一个视图。与ASP.NET页面不一样,MVC视图后端没有任何代码。你可以通过右键点击控制器post函数并选择“view”选项来创建视图。向项目增加视图的第二种方法是,右键点击你的视图文件夹,并增加一个新视图。默认情况下,没有后端代码的.ASPX就是这些视图。你可以在项目中增加一个.ASCX文件和HTML文件作为视图。

图7
本例中,我创建了4个不同的视图来实现增加、编辑、列举和显示员工详细信息,它们都是强类型视图。我使用了HTML帮助类,在视图中创建HTML对象和验证信息来验证客户端数据项。以下代码显示了如何使用HTML帮助类创建一个HTML输入控制和添加验证。
<div class="editor-field"> <%= Html.TextBoxFor(Function(model) model.EmployeeName) %> <%= Html.ValidationMessageFor(Function(model) model.EmployeeName) %> </div>
我试用HTML辅助方法ActionLink来实现视图导航,使用Html.Encode()来将“<”和“>”等特殊字符编码成可以在网页上正常显示的字符。微软推荐使用HTML.Encode()方法来防止JavaScript注入攻击。以下是向数据库增加一名新员工的代码。



结束语
对于那些刚接触ASP.NET Web编程的开发者来说,学习MVC框架并不是一件难事。MVC框架应用程序的代码也非常容易维护。另外,开发者还可以在该框架中使用测试驱动开发方法。