成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鮮為人知的ASP.NET MVC 2.0框架高效之謎

原創(chuàng)
開發(fā) 后端
在本篇文章中,我將向你演示如何使用MVC 2.0框架創(chuàng)建一個(gè)ASP.NET Web應(yīng)用。ASP.NET MVC 2.0是微軟最新版框架,可以創(chuàng)建運(yùn)行在.NET框架2.0、3.0或3.5上的Web應(yīng)用。

【51CTO獨(dú)家特稿】要想建立開發(fā)環(huán)境,你需要安裝Visual Studio 2008/2010 Beta 2,以及SQL Express 2005(可免費(fèi)從MSDN下載)和MVC 2.0框架。我把本文中的示例Web應(yīng)用命名為“Employee Master Information”。51CTO-.NET頻道向您推薦《ASP.NET MVC框架視頻教程》以便于您更好的理解本文。

使用該應(yīng)用程序,你可以輸入新員工數(shù)據(jù),編輯現(xiàn)有員工數(shù)據(jù),可以查看特定員工數(shù)據(jù),和從數(shù)據(jù)庫(kù)中給刪除任意員工信息。該應(yīng)用程序還使用了ASP.NET的Membership Provider來(lái)創(chuàng)建新用戶和認(rèn)證已有用戶,客戶端驗(yàn)證通過JavaScript實(shí)現(xiàn)。

創(chuàng)建MVC項(xiàng)目

圖1

創(chuàng)建MVC項(xiàng)目、數(shù)據(jù)庫(kù)和數(shù)據(jù)模型

在此前的ASP.NET MVC 2.0文章中,我討論過如何使用Visual Studio 2008編輯器來(lái)創(chuàng)建一個(gè)MVC Web應(yīng)用程序。在本篇文章中我使用VS2008(.NET框架3.5)創(chuàng)建的項(xiàng)目名稱為“MyMvcSample”。創(chuàng)建了MVC 2.0網(wǎng)站后,接下來(lái)將是創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)模型。

創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)模型

圖2

右鍵點(diǎn)擊項(xiàng)目的“App_Data”文件夾,并向你的解決方案增加一個(gè)“SQL Server Database”對(duì)象。如果你的開發(fā)環(huán)境中沒有安裝“SQL Express”,你不會(huì)在“Template”窗口中看到這個(gè)選項(xiàng)。將SQL Express數(shù)據(jù)庫(kù)的名稱指定為MySampleDatabase.mdf,點(diǎn)擊“Add”按鈕后,一個(gè)新數(shù)據(jù)庫(kù)將被添加到App_Data文件夾中。現(xiàn)在從“View”菜單中打開“Server Explorer”;你將看到MySampleDatabase.mdf數(shù)據(jù)庫(kù)已經(jīng)存在。右鍵點(diǎn)擊該數(shù)據(jù)庫(kù)下的“Tables”對(duì)象,增加一個(gè)名為“tblEmployee”的新表。在該表中添加以下列。

  1. EmployeeName nvarchar(100)   
  2. EmployeeSalary numeric(18, 2)   
  3. EmployeeId int (Primary Key)   
  4. Department nvarchar(100)   
  5. Age int  
  6. Skillset nvarchar(1000)   
  7. Role nvarchar(50) 

對(duì)于主鍵列,你需要修改兩個(gè)屬性:將“Identity Specification”的值從“No”改為“Yes”,將“Identity Increment”從0改為1。表創(chuàng)建完后,增加一些示例數(shù)據(jù)以供測(cè)試用。

增加一些示例數(shù)據(jù)以供測(cè)試用

圖3

接下來(lái)你需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)模型,右鍵點(diǎn)擊“Model”文件夾,并增加一個(gè)新條目。從模板列表中選擇“ADO.NET Entity Data Model”。在本示例中我的模型名稱為“DataModel.edmx”。點(diǎn)擊增加按鈕向你的解決方案添加該模型。接下來(lái)你將看到一個(gè)向?qū)Ы缑妫鼘⒅笇?dǎo)你為剛才創(chuàng)建的模型增加數(shù)據(jù)源。選擇“Generate from Database”并點(diǎn)擊下一步。

接下來(lái)你需要選擇合適的數(shù)據(jù)源,從列表中選擇此前創(chuàng)建的“MySampleDatabase.mdf”,并為該數(shù)據(jù)源指定一個(gè)名稱。在解決方案web.config文件下的“ConnectionStrings”標(biāo)簽下,你將看到一個(gè)自動(dòng)生成的包含數(shù)據(jù)源名稱和連接字符串的條目。在本例中我的連接名稱是“MySampleDatabaseEntities”。接下來(lái),檢查tblEmployee,并向你的模型提供一個(gè)命名空間名稱。

提供一個(gè)命名空間名稱

圖4

在模型創(chuàng)建后,在模型查看器中打開DataModel.edmx。該查看器將幫助你查看模型數(shù)據(jù)源,以及模型和數(shù)據(jù)庫(kù)之間的字段映射。使用模型查看器你還可以更改模型屬性、字段名和數(shù)據(jù)類型。這個(gè)“Employee”模型將被在Controller類中使用,來(lái)增加、編輯和刪除數(shù)據(jù)庫(kù)中的員工詳細(xì)信息。DataModel.edmx是一個(gè)ADO.NET Entity Framework對(duì)象,可以在進(jìn)行插入、更新或刪除數(shù)據(jù)時(shí)減少代碼編寫工作量。ADO.NET Entity Framework還支持LINQ,因此你可以在業(yè)務(wù)對(duì)象上編寫查詢類的SQL,而無(wú)需編寫存儲(chǔ)過程來(lái)抓取數(shù)據(jù)。

編寫查詢類的SQL

圖5

#p#

創(chuàng)建控制器

控制器將會(huì)用到 Microsoft.Web.Mvc.Build.dll和Microsoft.Web.Mvc.dll中的類。因此在編譯應(yīng)用程序之前,應(yīng)檢查上述兩個(gè)動(dòng)態(tài)庫(kù)已經(jīng)在你的bin文件夾下。

對(duì)于增加、編輯、刪除和查看員工職責(zé)詳細(xì)信息等操作,我已經(jīng)在我的HomeController中增加了“Get”和“Post”函數(shù)。控制器中的每一個(gè)函數(shù)都被關(guān)聯(lián)到一個(gè)視圖(.ASPX頁(yè)面),例如為了查看員工列表,我編寫了“Index”函數(shù)來(lái)返回員工列表信息,該信息將被顯示在名為“Index.aspx”的視圖中。要想顯示某個(gè)特定員工的數(shù)據(jù),則會(huì)調(diào)用Details函數(shù)。

 

  1. Function Details(ByVal id As Integer) As ActionResult  
  2. Dim objEditEmployee = (From c In objDatabaseEntities.EmployeeSet 
  3. Where c.EmployeeId = id Select c).FirstOrDefault()  
  4.             Return View(objEditEmployee)  
  5. End Function 

LINQ被用來(lái)查詢業(yè)務(wù)對(duì)象和從Employee List模型中查找某個(gè)特定員工。通過使用“Return View”,這個(gè)員工對(duì)象將被發(fā)回到相應(yīng)的視圖。至于創(chuàng)建一個(gè)新員工,我也為“Create”方法創(chuàng)建了“Get”和“Post”兩個(gè)版本。該方法的Get版將重定向到一個(gè)空白Employee頁(yè)面/視圖,由用戶來(lái)輸入員工詳細(xì)信息,而Post版的“Create”函數(shù)將使用我們之前創(chuàng)建的Employee Model對(duì)象保存數(shù)據(jù)庫(kù)中的員工詳細(xì)信息。51C TO-.NET頻道向您推薦《LINQ教程-LINQ to SQL技術(shù)精解》專題。

框架應(yīng)用

圖6

我對(duì)Create.aspx頁(yè)面中的所有輸入字段都添加了合適的客戶端驗(yàn)證代碼。如果新輸入的員工姓名已經(jīng)存在,則數(shù)據(jù)不會(huì)被插入到數(shù)據(jù)庫(kù)中。

 

  1. Function Create(ByVal objEmployee As Employee) As ActionResult  
  2.             Try  
  3. Dim objExtEmployee = (From c In objDatabaseEntities.EmployeeSet Where   
  4. c.EmployeeName = objEmployee.EmployeeName Select c).FirstOrDefault()  
  5.          If objExtEmployee Is Nothing Then  
  6.               objDatabaseEntities.AddToEmployeeSet(objEmployee)  
  7.               objDatabaseEntities.SaveChanges()  
  8.               Return RedirectToAction("Index")  
  9.                 End If  
  10.             Catch  
  11.                 Return View()  
  12.             End Try  
  13.             Return RedirectToAction("Index")  
  14. End Function 

對(duì)于編輯員工詳細(xì)信息,我也創(chuàng)建“Get”和“Post”版的Edit函數(shù),不過我在HomeController本身中增加了驗(yàn)證機(jī)制。如果驗(yàn)證失敗的話,我會(huì)使用Modelstate.Addmodelerror()函數(shù)來(lái)向相應(yīng)視圖拋出一個(gè)錯(cuò)誤信息。

  1. Protected Sub ValidateContact(ByVal EmployeeToValidate As Employee)  
  2.      If EmployeeToValidate.EmployeeName.Trim().Length = 0 Then  
  3.          ModelState.AddModelError("Employee Name", "Employee name is required   
  4.          field.")  
  5.      End If  
  6.      If EmployeeToValidate.EmployeeId.ToString().Trim().Length = 0 Then  
  7.      ModelState.AddModelError("Employee Id", "Employee Id is required field.")  
  8.      End If  
  9.      If (EmployeeToValidate.Department.Length = 0) Then  
  10.      ModelState.AddModelError("Employee Department", "Employee Department is   
  11.       required field.")  
  12.      End If  
  13.      If (EmployeeToValidate.EmployeeSalary.ToString().Length = 0) Then  
  14.      ModelState.AddModelError("Employee Salary", "Employee Salary is required   
  15.          field.")  
  16.      End If  
  17.      If (EmployeeToValidate.Age.ToString().Length = 0) Then  
  18.  ModelState.AddModelError("Employee Age", "Employee Age is required field.")  
  19.      End If  
  20.      If (EmployeeToValidate.Skillset.ToString().Length = 0) Then  
  21. ModelState.AddModelError("Employee Skillset", "Employee Skillset is required   
  22.          field.")  
  23.      End If  
  24.      If (EmployeeToValidate.Skillset.ToString().Length = 0) Then  
  25.          ModelState.AddModelError("Employee Role", "Employee Role is required   
  26.          field.")  
  27.      End If  
  28.  End Sub 

在刪除員工列表方面,我只增加了一個(gè)Get版,并在視圖中增加了必要的JavaScript驗(yàn)證代碼(確認(rèn)信息)。

創(chuàng)建視圖

在一個(gè)ASP.NET MVC應(yīng)用中,所有入站的瀏覽器請(qǐng)求都被映射到控制器行為上。控制器行為可能會(huì)返回一個(gè)視圖。與ASP.NET頁(yè)面不一樣,MVC視圖后端沒有任何代碼。你可以通過右鍵點(diǎn)擊控制器post函數(shù)并選擇“view”選項(xiàng)來(lái)創(chuàng)建視圖。向項(xiàng)目增加視圖的第二種方法是,右鍵點(diǎn)擊你的視圖文件夾,并增加一個(gè)新視圖。默認(rèn)情況下,沒有后端代碼的.ASPX就是這些視圖。你可以在項(xiàng)目中增加一個(gè).ASCX文件和HTML文件作為視圖。

結(jié)果

圖7

本例中,我創(chuàng)建了4個(gè)不同的視圖來(lái)實(shí)現(xiàn)增加、編輯、列舉和顯示員工詳細(xì)信息,它們都是強(qiáng)類型視圖。我使用了HTML幫助類,在視圖中創(chuàng)建HTML對(duì)象和驗(yàn)證信息來(lái)驗(yàn)證客戶端數(shù)據(jù)項(xiàng)。以下代碼顯示了如何使用HTML幫助類創(chuàng)建一個(gè)HTML輸入控制和添加驗(yàn)證。

  1. <div class="editor-field"> 
  2. <%= Html.TextBoxFor(Function(model) model.EmployeeName) %> 
  3. <%= Html.ValidationMessageFor(Function(model) model.EmployeeName) %> 
  4. </div> 

我試用HTML輔助方法ActionLink來(lái)實(shí)現(xiàn)視圖導(dǎo)航,使用Html.Encode()來(lái)將“<”和“>”等特殊字符編碼成可以在網(wǎng)頁(yè)上正常顯示的字符。微軟推薦使用HTML.Encode()方法來(lái)防止JavaScript注入攻擊。以下是向數(shù)據(jù)庫(kù)增加一名新員工的代碼。

  1. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
  2.     <h2>Create Employee</h2> 
  3.     <%=""%> 
  4.     <% Using Html.BeginForm()%> 
  5.  
  6.         <fieldset> 
  7.             <legend>Details to Enter</legend>            
  8.             <div class="editor-label"> 
  9.                 <%=Html.LabelFor(Function(model) model.EmployeeName)%> 
  10.             </div> 
  11.             <div class="editor-field"> 
  12.              <%= Html.TextBoxFor(Function(model) model.EmployeeName) %> 
  13.      <%= Html.ValidationMessageFor(Function(model) model.EmployeeName) %> 
  14.             </div>            
  15.             <div class="editor-label"> 
  16.                 <%= Html.LabelFor(Function(model) model.EmployeeSalary) %> 
  17.             </div> 
  18.             <div class="editor-field"> 
  19.                 <%= Html.TextBoxFor(Function(model) model.EmployeeSalary) %> 
  20.     <%= Html.ValidationMessageFor(Function(model) model.EmployeeSalary) %> 
  21.             </div>            
  22.             <div class="editor-label"> 
  23.                 <%= Html.LabelFor(Function(model) model.EmployeeId) %> 
  24.             </div> 
  25.             <div class="editor-field"> 
  26.         <%= Html.TextBoxFor(Function(model) model.EmployeeId) %> 
  27.          <%= Html.ValidationMessageFor(Function(model) model.EmployeeId) %> 
  28.             </div>            
  29.             <div class="editor-label"> 
  30.                 <%= Html.LabelFor(Function(model) model.Department) %> 
  31.             </div> 
  32.             <div class="editor-field"> 
  33.                 <%= Html.TextBoxFor(Function(model) model.Department) %> 
  34.        <%= Html.ValidationMessageFor(Function(model) model.Department) %> 
  35.             </div>            
  36.             <div class="editor-label"> 
  37.                 <%= Html.LabelFor(Function(model) model.Age) %> 
  38.             </div> 
  39.             <div class="editor-field"> 
  40.                 <%= Html.TextBoxFor(Function(model) model.Age) %> 
  41.         <%= Html.ValidationMessageFor(Function(model) model.Age) %> 
  42.             </div> 
  43.               
  44.             <div class="editor-label"> 
  45.                 <%= Html.LabelFor(Function(model) model.Skillset) %> 
  46.             </div> 
  47.             <div class="editor-field"> 
  48.                 <%= Html.TextBoxFor(Function(model) model.Skillset) %> 
  49.          <%= Html.ValidationMessageFor(Function(model) model.Skillset) %> 
  50.             </div>            
  51.             <div class="editor-label"> 
  52.                 <%= Html.LabelFor(Function(model) model.Role) %> 
  53.             </div> 
  54.             <div class="editor-field"> 
  55.                 <%= Html.TextBoxFor(Function(model) model.Role) %> 
  56.          <%= Html.ValidationMessageFor(Function(model) model.Role) %> 
  57.             </div> 
  58.               
  59.             <p> 
  60.                 <input type="submit" value="Create" /> 
  61.             </p> 
  62.         </fieldset> 
  63.     <% End Using %> 
  64.     <div> 
  65.         <%=Html.ActionLink("Back to Employee List", "Index")%> 
  66.     </div> 
  67. </asp:Content> 

結(jié)束語(yǔ)

對(duì)于那些剛接觸ASP.NET Web編程的開發(fā)者來(lái)說(shuō),學(xué)習(xí)MVC框架并不是一件難事。MVC框架應(yīng)用程序的代碼也非常容易維護(hù)。另外,開發(fā)者還可以在該框架中使用測(cè)試驅(qū)動(dòng)開發(fā)方法。

原文題目:Create a Web App Using ASP.NET MVC 2.0 Framework

【編輯推薦】

  1. 添加設(shè)置ASP.NET Web時(shí)出現(xiàn)問題
  2. 詳細(xì)說(shuō)明ASP.NET 2.0功能支持
  3. 強(qiáng)化部署ASP.Net 2.0配置應(yīng)用程序
  4. 微軟PDC2009直擊:改進(jìn)ASP.NET 4運(yùn)行時(shí)
  5. 詳解ASP.NET MVC 2自定義驗(yàn)證
責(zé)任編輯:彭凡 來(lái)源: 51CTO
相關(guān)推薦

2010-06-23 15:44:03

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2010-06-25 08:51:46

ASP.NET MVC

2009-07-22 13:08:55

拯救UpdatePanASP.NET MVC

2010-01-07 10:05:51

IT顧問特質(zhì)

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功

2011-05-03 13:13:52

編程PHPJava

2009-06-01 10:23:31

asp.net mvcasp.net mvc.net mvc框架

2009-03-13 10:58:48

ASP.NetMVC框架編程

2014-06-30 09:22:38

ASP.NETBootstrap

2014-04-22 16:38:12

GitHubGitHub 使用技巧

2009-07-22 17:23:03

XmlDataSourASP.NET 2.0

2010-06-23 08:56:58

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-09-14 09:45:20

Chrome谷歌操作系統(tǒng)

2023-04-23 15:11:26

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品一区二区视频 | 免费在线日韩 | 欧美成人h版在线观看 | 色播视频在线观看 | 久草免费在线视频 | 欧美一级免费看 | 精品一区二区三区中文字幕 | 性色视频 | 久久久国产一区 | 天天拍天天操 | 一级黄色片一级黄色片 | 国产免费让你躁在线视频 | 精品久久久久久久久久 | 欧美日韩在线成人 | 久久一区二区三区免费 | 特黄级国产片 | 天天操欧美 | 香蕉婷婷 | 亚洲精品乱码久久久久久按摩观 | 色约约视频 | 国产9久 | 激情欧美一区二区三区 | 有码一区 | 亚洲一区二区三区视频在线 | 狠狠的日 | 精品久久九九 | 精品一区二区三区四区视频 | 免费毛片网站在线观看 | 欧美日韩一区二区三区四区 | 久久精品欧美视频 | 一级黄色片美国 | 国产精品av久久久久久毛片 | 久久国产婷婷国产香蕉 | 久久久国产亚洲精品 | 黄a网 | 99re在线视频免费观看 | 色综合天天综合网国产成人网 | 免费国产视频在线观看 | 久久这里只有精品首页 | 久久久久久久国产 | 成人免费高清 |