一起谈.NET技术,鲜为人知的ASP.NET MVC 2.0框架高效之谜

简介:   要想建立开发环境,你需要安装Visual Studio 2008/2010 Beta 2,以及SQL Express 2005(可免费从MSDN下载)和MVC 2.0框架。我把本文中的示例Web应用命名为“Employee Master Information”。

  要想建立开发环境,你需要安装Visual Studio 2008/2010 Beta 2,以及SQL Express 2005(可免费从MSDN下载)和MVC 2.0框架。我把本文中的示例Web应用命名为“Employee Master Information”。

  使用该应用程序,你可以输入新员工数据,编辑现有员工数据,可以查看特定员工数据,和从数据库中给删除任意员工信息。该应用程序还使用了ASP.NET的Membership Provider来创建新用户和认证已有用户,客户端验证通过JavaScript实现。

图1

  创建MVC项目、数据库和数据模型

  在此前的ASP.NET MVC 2.0文章中,我讨论过如何使用Visual Studio 2008编辑器来创建一个MVC Web应用程序。在本篇文章中我使用VS2008(.NET框架3.5)创建的项目名称为“MyMvcSample”。创建了MVC 2.0网站后,接下来将是创建数据库和数据模型。

图2

  右键点击项目的“App_Data”文件夹,并向你的解决方案增加一个“SQL Server Database”对象。如果你的开发环境中没有安装“SQL Express”,你不会在“Template”窗口中看到这个选项。将SQL Express数据库的名称指定为MySampleDatabase.mdf,点击“Add”按钮后,一个新数据库将被添加到App_Data文件夹中。现在从“View”菜单中打开“Server Explorer”;你将看到MySampleDatabase.mdf数据库已经存在。右键点击该数据库下的“Tables”对象,增加一个名为“tblEmployee”的新表。在该表中添加以下列。

 
 
EmployeeName nvarchar( 100 )
EmployeeSalary numeric(
18 , 2 )
EmployeeId
int (Primary Key)
Department nvarchar(
100 )
Age
int
Skillset nvarchar(
1000 )
Role nvarchar(
50 )

  对于主键列,你需要修改两个属性:将“Identity Specification”的值从“No”改为“Yes”,将“Identity Increment”从0改为1。表创建完后,增加一些示例数据以供测试用。

图3

  接下来你需要创建一个数据模型,右键点击“Model”文件夹,并增加一个新条目。从模板列表中选择“ADO.NET Entity Data Model”。在本示例中我的模型名称为“DataModel.edmx”。点击增加按钮向你的解决方案添加该模型。接下来你将看到一个向导界面,它将指导你为刚才创建的模型增加数据源。选择“Generate from Database”并点击下一步。

  接下来你需要选择合适的数据源,从列表中选择此前创建的“MySampleDatabase.mdf”,并为该数据源指定一个名称。在解决方案web.config文件下的“ConnectionStrings”标签下,你将看到一个自动生成的包含数据源名称和连接字符串的条目。在本例中我的连接名称是“MySampleDatabaseEntities”。接下来,检查tblEmployee,并向你的模型提供一个命名空间名称。

图4

  在模型创建后,在模型查看器中打开DataModel.edmx。该查看器将帮助你查看模型数据源,以及模型和数据库之间的字段映射。使用模型查看器你还可以更改模型属性、字段名和数据类型。这个“Employee”模型将被在Controller类中使用,来增加、编辑和删除数据库中的员工详细信息。DataModel.edmx是一个ADO.NET Entity Framework对象,可以在进行插入、更新或删除数据时减少代码编写工作量。ADO.NET Entity Framework还支持LINQ,因此你可以在业务对象上编写查询类的SQL,而无需编写存储过程来抓取数据。

  图5

  创建控制器

  控制器将会用到 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:Content ID = " Content2 " ContentPlaceHolderID = " MainContent " runat = " server " >
< h2 > Create Employee </ h2 >
<%= "" %>
<% Using Html.BeginForm() %>

< fieldset >
< legend > Details to Enter </ legend >
< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.EmployeeName) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.EmployeeName) %>
<%= Html.ValidationMessageFor(Function(model) model.EmployeeName) %>
</ div >
< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.EmployeeSalary) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.EmployeeSalary) %>
<%= Html.ValidationMessageFor(Function(model) model.EmployeeSalary) %>
</ div >
< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.EmployeeId) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.EmployeeId) %>
<%= Html.ValidationMessageFor(Function(model) model.EmployeeId) %>
</ div >
< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.Department) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.Department) %>
<%= Html.ValidationMessageFor(Function(model) model.Department) %>
</ div >
< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.Age) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.Age) %>
<%= Html.ValidationMessageFor(Function(model) model.Age) %>
</ div >

< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.Skillset) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.Skillset) %>
<%= Html.ValidationMessageFor(Function(model) model.Skillset) %>
</ div >
< div class = " editor-label " >
<%= Html.LabelFor(Function(model) model.Role) %>
</ div >
< div class = " editor-field " >
<%= Html.TextBoxFor(Function(model) model.Role) %>
<%= Html.ValidationMessageFor(Function(model) model.Role) %>
</ div >

< p >
< input type = " submit " value = " Create " />
</ p >
</ fieldset >
<% End Using %>
< div >
<%= Html.ActionLink( " Back to Employee List " , " Index " ) %>
</ div >
</ asp:Content >

  结束语

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

目录
相关文章
|
1月前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
54 7
|
1月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
27 5
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
1月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
32 4
|
1月前
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
61 5
|
1月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
39 3
|
1月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
25 3
|
1月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
36 3
|
1月前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
1月前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)

热门文章

最新文章

相关实验场景

更多