欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
mvc5入門(mén),經(jīng)典教程。

轉子 http://www.yanjinnan.com/archives/category/tech/efmvc

ASP.NET MVC 5  一 入門(mén)

發(fā)表于 2013 年 8 月 12 日 由 顏晉南

暫無(wú)評論

本系類(lèi)教程將要構建ASP.NET MVC 5 Web 應用程序,使用的工具是VS2013 ?,F在有預覽版可以下載了, 點(diǎn)擊下載VS2013 FOR WEB ISO文件 。VS2012 還沒(méi)用幾天呢,2013就要出來(lái),據說(shuō)數據庫有SQL2014的版本了。不帶這么玩的?。?!

Go

安裝完VS2013 for Web 后,打開(kāi)在起始頁(yè)(start page)選擇新建項目。

可以發(fā)現和VS2012最大的不同,WEB里面只有一個(gè)選擇,確定后接下來(lái)才開(kāi)始選擇其他的:

VS2012 還有MVC3 MVC4選擇,在VS2013沒(méi)得選。好了,創(chuàng )建項目后,我們直接按下F5運行。

好了,一個(gè)網(wǎng)站OK了。擁有 首頁(yè)、關(guān)于、聯(lián)系方式等頁(yè)面。更NB的是注冊登錄也有了。

查看了下網(wǎng)頁(yè)源代碼,前端用的是大名鼎鼎的 bootstrap。有時(shí)間會(huì )專(zhuān)門(mén)寫(xiě)這個(gè)系類(lèi)的文章。

ASP.NET MVC 5 入門(mén)二 添加控制器

發(fā)表于 2013 年 8 月 13 日 由 顏晉南

什么是MVC?MVC就是 Models 模型,Views 視圖,Controllers 控制器。MVC雖然分為3個(gè)部分,但是和三層沒(méi)有關(guān)系,是一種用來(lái)開(kāi)發(fā)應用程序的模式具有良好的架構,易于維護和測試。

  • Models:可以理解為是對應用程序的狀態(tài)、數據以及業(yè)務(wù)功能的封裝。
  • Views:用來(lái)顯示和用戶(hù)進(jìn)行交互的HTML頁(yè)面。(界面的顯示和互動(dòng))
  • Controllers:處理傳入的請求,完成相應的UI邏輯調用Model里面的相應業(yè)務(wù)。

下面讓我們添加一個(gè)控制器類(lèi),在資源管理器 項目里面的Controllers 右擊。

接下來(lái)去個(gè)名字吧,第一個(gè)實(shí)例一般都喜歡用 helloworld 。

我們把代碼改成如下,直接返回string字符串在瀏覽器窗口。

123456789101112131415161718192021222324
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc; namespace MVC5DEMO.Controllers{  public class HelloWorldController : Controller  {    //    // GET: /HelloWorld/    public string Index()    {      return "這是HelloWorld默認的一個(gè)動(dòng)作(action)";    }     //GET:/HelloWorld/Welcome/    public string Welcome()    {      return "這是Welcome的 action 方法";    }  }}

按下F5,在默認的網(wǎng)頁(yè)地址后面加上Helloworld,如下圖:

一回車(chē),就會(huì )看到我們剛才寫(xiě)的字符串顯示在頁(yè)面上。

ASP.NET MVC 會(huì )根據傳入的URL調用不同的控制器類(lèi)(上面例子的HelloWorld)以及里面不同的方法(上面例子的Index、Welcome)。具體依據什么來(lái)判斷調用的是哪個(gè)控制器,哪個(gè)方法在A(yíng)pp_Start/RouteConfig.cs 文件里面設定。

如果直接訪(fǎng)問(wèn)域名,會(huì )默認調用 defaults里面的 Home控制器下面的Index方法,后面的ID是傳入的參數等數據后面會(huì )介紹。

所以剛才我們?yōu)g覽的地址:MVC默認的映射來(lái)解析的話(huà)控制器是 HelloWorld ,調用的方法是:Welcome 沒(méi)有ID這個(gè)參數。接下來(lái)我們修改為以下代碼:

12345
//GET:/HelloWorld/Welcome/        public string Welcome(string name , int age = 18)        {            return HttpUtility.HtmlEncode( "歡迎"+name+",您的年齡是:"+age) ;        }

給Welcome 方法傳入2個(gè)參數,年齡默認是18 。接下來(lái)我們看看運行結果。

以前要獲得GET方法傳入的參數,需要寫(xiě)一句代碼(request),現在MVC自動(dòng)的幫我們綁定了,多方便!接下來(lái)我們把上面的那個(gè)代碼中的age改成ID,瀏覽器地址后面添加 /3?name=yan

這次的Welcome后面加上了/3 剛好匹配到了ID,剩下的就匹配到了name這個(gè)參數。按照這個(gè)思路,是不是有辦法讓地址欄直接匹配到name,這樣url里面就沒(méi)有 ? 這個(gè)符號。

我們在A(yíng)pp_start\RouteConfig.cs里面添加一個(gè)試試:

當然,默認的路由規則大多數情況下是很合適的,不需要去修改。接下來(lái)會(huì )介紹模型綁定,這樣就不需要修改路由規則了。

下一步學(xué)習: 添加視圖(View)

ASP.NET MVC5 入門(mén)三——添加視圖

發(fā)表于 2013 年 8 月 16 日 由 顏晉南

在上一篇《 ASP.NET MVC5 添加控制器 》里面我們都是直接返回string 字符串或者html 。這樣的話(huà)控制器不僅僅做了控制器的工作還做了VIEW(視圖)的工作。通常我們不希望控制器直接返回HTML,因為那樣子復雜的頁(yè)面就會(huì )非常繁瑣,所以我們通常會(huì )用一個(gè)單獨的視圖模板文件來(lái)輔助生產(chǎn)對應的html響應報文返回客戶(hù)端。

接下來(lái)我們就來(lái)看看如何添加視圖,先修改上篇博客的那個(gè)例子,我們來(lái)修改HelloWorldController類(lèi),這樣才能讓view的模板文件來(lái)封裝要返回的html響應報文。

首先,創(chuàng )建一個(gè)視圖文件夾 HelloWorld 。右鍵單擊(view)——》添加——》新建文件夾。

注意名字一定要是 HelloWorld 因為控制器名字是 HelloWorldController 控制器必須是Controller結尾,視圖文件夾的名字必須和控制器除了結尾的部分一樣。也就是“約定優(yōu)于配置”的理念。

接下來(lái)添加一個(gè)支架,選擇 MVC5 視圖—空 不帶模型

點(diǎn)擊添加,彈出的對話(huà)框把視圖名字(View name)改為 Index 。其他保持默認然后確定。

可以看到多了一個(gè) Index.cshtml的文件。在上面的</h2>后面添加如下的html代碼:

<p>這是一個(gè)View模板,來(lái)自于:HelloWorld下面的Index視圖!</p>

然后在index.cshtml文件上面右鍵,選擇在頁(yè)面檢查器中查看。當然也可以按下F5進(jìn)行運行,在瀏覽器地址欄輸入地址進(jìn)行查看。

但瀏覽器的地址發(fā)到服務(wù)器的時(shí)候,服務(wù)器解析給控制器,然后控制器里面只有一句 return View()語(yǔ)句,指定返回一個(gè)視圖模板文件給瀏覽器,我們沒(méi)有寫(xiě)指定什么名字的視圖,默認就是Index。

更改視圖和布局頁(yè)面

首先,上一個(gè)頁(yè)面我們需要修改標題,顯示我們自己的信息。頁(yè)面頂部在一個(gè)網(wǎng)站之中的每一頁(yè)一般都是一樣的所以我們來(lái)修改布局的頁(yè)面也叫母版頁(yè)。在解決方案資源管理器里面,打開(kāi)/views/shared 里面的_Layout.cshtml文件。

可以看到,有很多@開(kāi)頭的內容,比如你能在body里面找到 @RenderBody() 這一行。這個(gè)什么意思呢?其實(shí)說(shuō)白了就是一個(gè)占位符,到時(shí)候可以用具體的視圖來(lái)填補這個(gè)信息。好比剛才那個(gè)Index.cshtml就是用來(lái)填補這里的。下面我們來(lái)修改標題,通過(guò)這個(gè)了解占位符,以及母版頁(yè)(布局頁(yè))的作用。

在_Layout.cshtml 的頭部,有個(gè) <title>@ViewBag.Title – My ASP.NET Application</title> 我們修改為<title>@ViewBag.Title – 我的ASP.NET MVC5示例網(wǎng)站</title> 。body 里面的@Html.ActionLink(“Application name”, “Index”, “Home”, null, new { @class = “brand” }) 修改為 @Html.ActionLink(“MVC5示例網(wǎng)站”, “Index”, “Home”, null, new { @class = “brand” })

回到剛才的Index.cshtml ,修改成如下:

然后按下F5運行看看??梢钥吹皆跒g覽器頂端的標題是 首頁(yè)1-我的ASP.NET。。。。 說(shuō)明<title>@ViewBag.Title – 我的ASP.NET MVC5示例網(wǎng)站</title> 這句代碼里面的 @ViewBag.Title 被Index.cshtml 里面對應的ViewBag.Title替換了。同時(shí)body里面被index.cshtml的內容填充了。

我們去About頁(yè)面也能看到標題都變化了。這就是母版頁(yè)的作用,我們能夠在布局頁(yè)面中修改一次,網(wǎng)站上的所有頁(yè)面都顯示新的標題。如果看不到效果的話(huà)可以CTRL+F5強制刷新看看。

上一篇的博文直接從M(模型)傳HTML回去,這次貌似直接用V(視圖),模型倒是沒(méi)怎么用。接下來(lái)我們就創(chuàng )建一個(gè)數據庫,通過(guò)M 模型 傳遞給 V 視圖 來(lái)顯示相應信息。

將數據從控制器傳遞到視圖

在我們建立數據庫和模型之前,簡(jiǎn)單說(shuō)下數據從控制器傳遞到視圖。當服務(wù)器接收到瀏覽器一個(gè)url的請求,某個(gè)控制器的某個(gè)方法會(huì )來(lái)響應這次請求??刂破黝?lèi)就是那個(gè)我們寫(xiě)代碼來(lái)解析瀏覽器傳入的請求、分析業(yè)務(wù)、從數據檢索出數據經(jīng)過(guò)處理后最終決定返回什么樣的數據給瀏覽器。然后視圖VIEW就可以獲得控制器傳入的數據,進(jìn)行整理封裝成HTML返回給瀏覽器??刂破魈峁┮晥D返回給瀏覽器需要的數據或者對象。所以,最好讓視圖不執行業(yè)務(wù)邏輯不與數據打交道,需要的數據就從控制器拿。這樣才能保證“關(guān)注點(diǎn)分離”(SOC)。

回到我們昨天寫(xiě)的另外一個(gè)方法 Welcome 它需要2個(gè)參數,一個(gè)是name一個(gè)是ID。代碼如下:

ViewBage 是個(gè)動(dòng)態(tài)的對象,意味著(zhù)我們可以隨時(shí)添加需要的屬性。再添加之前ViewBag 并沒(méi)有那個(gè)屬性。借助于上個(gè)博客說(shuō)的ASP.NET MVC的自動(dòng)綁定模型,可以直接賦值給剛才動(dòng)態(tài)創(chuàng )建的屬性 Message 和 tiems。接下來(lái)我們按照之前的步驟在添加一個(gè)視圖:Welcome 。

代碼如下:

非常的簡(jiǎn)單,循環(huán)輸出消息。F5運行在地址欄輸入

當我們輸入上面地址欄的那個(gè)地址時(shí)候,服務(wù)器傳遞給相應的控制器處理,控制器獲得參數,把數據打包成一個(gè)ViewBag對象,并將該對象傳遞給視圖,視圖獲得對象后取到需要的數據,組織好HTML語(yǔ)句然后返回給客戶(hù)的瀏覽器。

接下來(lái)的教程,將會(huì )介紹使用視圖模型來(lái)將數據從控制器傳遞到視圖。利用視圖模型的方法會(huì )比一般的方法好(強類(lèi)型)。

下一步: 添加模型   額,M(model)的一種模型,不是數據庫的那種 。

ASP.NET MVC5 入門(mén)四——添加模型

發(fā)表于 2013 年 8 月 19 日 由 顏晉南

暫無(wú)評論

在本節中,我們將要添加一些類(lèi)來(lái)管理數據庫中的信息。MVC入門(mén)系類(lèi)的文章打算建立一個(gè)電影網(wǎng)站的示例。在前幾篇的博客《 Entity Framework學(xué)習——了解 》,我介紹了新的編程方式 Code First 。所以我們應該添加一些類(lèi)來(lái)作為MVC中的“模型”部分。

添加模型類(lèi)

在解決方案資源管理器中,右鍵單擊 Models 文件夾,選擇添加,然后選擇類(lèi):

輸入類(lèi)名“Movie”。

向類(lèi)“Movie”添加以下5個(gè)屬性:

12345678910111213141516
using System;using System.Collections.Generic;using System.Linq;using System.Web; namespace MVC5DEMO.Models{  public class Movie  {    public int ID { get; set; }    public string Title { get; set; }    public DateTime ReleaseDate { get; set; }    public string Genre { get; set; }    public decimal Price { get; set; }  }}

從上面的代碼可以看出,這個(gè)就是用類(lèi)(class)來(lái)表示數據庫中的電影(電影數據信息)。類(lèi)的每個(gè)實(shí)例對應著(zhù)數據庫中的每行,類(lèi)的屬性對應著(zhù)數據庫中的每列。

在Movie中繼續添加代碼,我們添加一個(gè) MovieDBContext 類(lèi):

可以看出,MovieDBContext 繼承至 DbContext 。我們需要應用Entity,可以手動(dòng)加入以下的using System.Data.Entity;語(yǔ)句或者像上圖那樣,在紅色錯誤處右鍵選擇解析,然后自動(dòng)添加引用。我們也會(huì )發(fā)現,有些應用我們不需要,按照下圖方式清除未使用的using語(yǔ)句:

12345678910111213141516171819
using System;using System.Data.Entity; namespace MVC5DEMO.Models{  public class Movie  {    public int ID { get; set; }    public string Title { get; set; }    public DateTime ReleaseDate { get; set; }    public string Genre { get; set; }    public decimal Price { get; set; }  }   public class MovieDBContext:DbContext  {    public DbSet Movies { get; set; }  }}

上面就是最終的代碼,清爽許多。這也是我喜歡.NET 勝過(guò)JAVA的原因,有個(gè)強大的IDE。非常方便,使用起來(lái)容易上手。對于中小企業(yè),快速的開(kāi)發(fā)出合格產(chǎn)品才是王道!

下一節: 添加數據庫連接字符串和LocalDB 。

ASP.NET MVC5 入門(mén)五——使用LocalDB

發(fā)表于 2013 年 8 月 20 日 由 顏晉南

暫無(wú)評論

在上一篇博文《 ASP.NET MVC5 入門(mén)四——添加模型 》中,我們創(chuàng )建了M模型對應的模型類(lèi)。最終我們還是要在數據庫中創(chuàng )建真實(shí)的數據庫和表,字段等。對于開(kāi)發(fā)人員,數據庫在開(kāi)發(fā)過(guò)程中只是需要一些簡(jiǎn)單的功能,為了開(kāi)發(fā)而安裝一個(gè)企業(yè)版的SQL SERVER太浪費了。還好微軟在SQL2012中提供了LocalDB這個(gè)新特性,LocalDB也是VS2013默認就安裝的。

什么是LocalDB

簡(jiǎn)單說(shuō)就是 SQL免費版的SQL Server Express 的輕量級版本。專(zhuān)門(mén)為開(kāi)發(fā)人員創(chuàng )立的,易于安裝,無(wú)需管理,編程語(yǔ)言和T-SQL語(yǔ)言都和正常的數據庫一樣。同時(shí)不耗費系統支援,沒(méi)有服務(wù),需要時(shí)自動(dòng)啟動(dòng)停止。其他更高級的功能就不說(shuō)了,夠用,免費,好用才是王道。同時(shí)LocalDB數據庫也能方便的移植到SQL Server。

添加連接字符串

默認情況下,實(shí)體框架會(huì )查找和對象同名的上下文里面的連接字符串。在項目的根目錄下面打開(kāi)Web.config文件:

默認的連接字符串:

我們在<connectionStrings>里面添加一個(gè)新的連接字符串:

<add name=”MovieDBContext” connectionString=”Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Movies.mdf;Integrated Security=True” providerName=”System.Data.SqlClient” />

可以看出2個(gè)連接字符串都很相似。第一個(gè)名字是 DefaultConnection 用來(lái)控制可以訪(fǎng)問(wèn)該應用程序的成員資格數據庫。我們添加自己的Movie.mdf數據庫,不使用成員資格數據庫。連接字符串的名字必須和DbContext類(lèi)的名稱(chēng)相匹配。

添加好了之后,就是 下一步:從控制器訪(fǎng)問(wèn)模型中的數據 。

ASP.NET MVC5 入門(mén)六——通過(guò)控制器訪(fǎng)問(wèn)數據

發(fā)表于 2013 年 8 月 22 日 由 顏晉南

首先,我們要添加一個(gè)新的控制器,在解決方案資源管理器的Controllers文件夾右鍵單擊,添加,支架。

在對話(huà)框中,我們選擇下圖這個(gè): MVC5 控制器帶有 讀/寫(xiě) 和 視圖。

名字就叫做:MoviesController 。model class 選擇 MVC5DEMO.Models里面的 Movie。

數據上下文選擇 我們的MovieDBContext。然后點(diǎn)擊ADD。

恩,悲劇了。我們重新修改Models\Movie.cs文件,把Movies 改成Movie。

然后ASP.NET MVC5將會(huì )自動(dòng)創(chuàng )建增刪查改(CRUD)的方法(action)和視圖(views)。是的,一個(gè)完整功能的網(wǎng)站就OK了。我們F5運行看看。

當然,沒(méi)有數據,因為我們沒(méi)有添加任何數據。接下來(lái)我們點(diǎn)擊 Create New 添加新的電影條目。

添加電影:

我們來(lái)看看代碼

我們剛才添加一個(gè)新的controller的那個(gè)操作,系統自動(dòng)添加了哪些文件?

  • 一個(gè) MoviesController.cs 文件在Controllers 文件夾里面
  • 在視圖(views)文件夾下面多了一個(gè) Movies  文件夾
  • 在 Movies 文件夾里面,多了Create.cshtml,Delete.cshtml,Details.cshtml Edit.cshtml,和Index.cshtml

顯然,視圖(movies)里面的那些個(gè) cshtml 文件對應著(zhù)增刪改查和首頁(yè)等的頁(yè)面。我們先來(lái)看看 MoviesController.cs里面有什么?

上面的14行,定義了一個(gè)私有的電影數據上下文,可以用它來(lái)進(jìn)行查詢(xún),編輯,刪除等。

第18行的Index()方法返回的是 數據上下文中 所有的電影列表。

強類(lèi)型和@model關(guān)鍵字

前幾篇的博文,我們要返回一些到前臺是用 ViewBag 來(lái)封裝一些數據。當時(shí)說(shuō)了 ViewBag 是動(dòng)態(tài)對象,你可以隨意添加。我們這次演示的是強類(lèi)型,除了性能上的優(yōu)點(diǎn)還有如下優(yōu)點(diǎn):在編寫(xiě)代碼時(shí)候有智能提示;編譯時(shí)候也能檢查代碼是否有問(wèn)題。

在上面代碼25行的 Details 方法,它有個(gè)ID的參數。ID在我們前面也說(shuō)過(guò):類(lèi)似于這里面的那個(gè)1就是ID。用來(lái)表示電影的序號。當然也可以用  ?id=1  這樣來(lái)表示。如果找到了對應id的“電影”(27行的代碼)就返回 視圖(view)同時(shí)把movie傳進(jìn)去也就是返回一個(gè)強類(lèi)型的實(shí)例。我們看看對應的view(Details.cshtml)里面的代碼:

第一行就是一句 @model 指令。這個(gè)指令的作用是告訴視圖模板,這次傳過(guò)來(lái)的對象是什么類(lèi)型的,上圖例子就是傳過(guò)來(lái)一個(gè) models 里面的movie 對象。這樣在details.cshtml里面我們就能通過(guò)model.titile拿到movie的標題。

我們再來(lái)看看index視圖的代碼:

這次的 model 是一個(gè)實(shí)現了IEnumerable 接口的對象。所以我們可以用foreach遍歷它:

這又是強類(lèi)型的一個(gè)好處,可以用循環(huán)遍歷!

我們在web.config里面添加了一串連接字符串,指定Movies的數據庫是LocalDB數據庫里面的Movies.mdf。我們可以在資源管理器里面查看如下圖:如果看不見(jiàn)請單擊 顯示所有文件 按鈕:

雙擊 Movies.mdf 文件,會(huì )打開(kāi) 服務(wù)器資源管理器,然后我們展開(kāi) 表 看看:

能看到就像以前安裝 SQL SERVER一樣操作數據庫。

簡(jiǎn)單的介紹就到這里,明顯可以看出,開(kāi)發(fā)工具的進(jìn)步是越來(lái)越振奮人心了!

下一步: 優(yōu)化系統生成的代碼 。

ASP.NET MVC5 入門(mén)七——完善視圖

發(fā)表于 2013 年 8 月 23 日 由 顏晉南

7條評論

本節中,我們來(lái)修改上一篇博文里面系統自動(dòng)生成的一些代碼,下圖是運行后的截圖:

可以看到有很多不足比如:英文太多,日期格式太長(cháng)等。

我們回到 Models\Movie.cs 添加幾句代碼:

紅色框起來(lái)的就是增加的部分,using 語(yǔ)句里面的那個(gè) DataAnnotations 我們下載在說(shuō)。Display 屬性指定要顯示的字段的名稱(chēng)。原來(lái)沒(méi)有寫(xiě)的話(huà),就是數據庫字段的名稱(chēng),現在我們寫(xiě)上中文了。DataType 指定字段顯示的格式,改為日期這樣的話(huà)時(shí)間就不會(huì )顯示出來(lái),更美觀(guān)了。

在上圖左下角,能看到編輯的鏈接。這個(gè)鏈接是由 index.cshtml 里面的 Html.ActionLink 方法生成的:

Html是個(gè)Help 類(lèi),調用 ActionLink方法來(lái)動(dòng)態(tài)生成HTML超鏈接。ActionLink方法第一個(gè)參數指定顯示的字符串,第二個(gè)參數是 要調用的Action的名稱(chēng),第三個(gè)參數是一個(gè)匿名對象。

按照前幾篇講的 /Movies/Edit/3 和 /Movies/Edit?id=3 是等價(jià)的。這2個(gè)url都是傳遞給Movies的Edit方法來(lái)去執行,同時(shí)給出ID。我們去看看這個(gè)方法:

第一個(gè)方法是接受GET請求,第二個(gè)是接受HttpPost ??梢钥吹降诙€(gè)有個(gè)屬性【HttpPost】而第一個(gè)沒(méi)有,因為默認就是GET請求。我們注意到第二個(gè)Edit方法前面還有一個(gè)【ValidateAntiForgeryToken】這個(gè)主要是用來(lái)防止跨站請求偽造(CSRF)。這個(gè)需要和視圖里面@Html.AntiForgerToken() 配合使用,會(huì )生成一個(gè)隱藏的防偽標記。下次寫(xiě)個(gè)文章介紹一下。

在上面的GET的Edit 方法,調用實(shí)體框架的FIND方法查找時(shí)候存在對應id的電影,如果存在就返回給視圖,不存在就返回404。下面是視圖里面的代碼:

第一行代碼,綁定了一個(gè)強類(lèi)型對象。然后接下來(lái)利用這個(gè)對象,生成 <label> <input>等代碼。Html.LabelFor 這個(gè)幫助類(lèi)的方法顯示對應的標題,Html.EditorFor 用來(lái)生成<input>標簽,Html.ValidationMessageFor 就是用來(lái)進(jìn)行驗證的。

生成這么優(yōu)美的控件,居然一句代碼都不用寫(xiě),真好!

這是表單的源文件,可以看到有個(gè)隱藏域,存放著(zhù)上文的那個(gè) RequestVerificationToken 等信息。從這句話(huà)可以看出<form action=”/Movies/Edit/2″ method=”post”>當我們點(diǎn)擊save后,表單的所有數據都將用post請求發(fā)送到 /movies/edit/2 這個(gè)url。

回過(guò)頭來(lái)看POST請求的EDIT方法:

第一步,判斷表單中的模型所有屬性時(shí)候都可以修改或者更新。如果是有效的,就把實(shí)體框架狀態(tài)改為修改,然后更新到數據庫。保存之后,重定向到Index 這個(gè)方法,我們就會(huì )看到修改后的效果。

ASP.NET MVC5 入門(mén)八——添加搜索

發(fā)表于 2013 年 9 月 10 日 由 顏晉南

添加一個(gè)搜索的方法和搜索的視圖

接下來(lái)我們添加搜索功能,可以根據電影的標題搜索。

第一步:更新index窗體

在最開(kāi)始MVC入門(mén)說(shuō)過(guò),MVC一個(gè)好處就是關(guān)注點(diǎn)分離。當我們需要修改和數據有關(guān)的東西,只要去修改Controller 就可以?,F在我們去修改MoviesController的Index方法:

第一行的LINQ查詢(xún)用來(lái)選擇Movies。僅僅是定義了movies代表數據庫中的哪些,還沒(méi)有開(kāi)始查詢(xún)。接下來(lái)判斷查詢(xún)的字符串是否為空,如果不為空就開(kāi)始查詢(xún)標題一樣的電影。

s => s.Title 這是一個(gè)Lambda 表達式。一般用在基于方法的LINQ查詢(xún)中,比如上面的Where。

我們現在F5運行一下看看,在地址欄后面加上?searchString=中國

當然,我們不能讓用戶(hù)一直在地址欄加上那么一串來(lái)搜索,普遍做法是,在頁(yè)面頂部加一個(gè)搜索框??吹竭@個(gè)就知道需要改動(dòng)View部分。我們打開(kāi)Views\Movies\Index.cshtml 文件,在Create New后面加上如下代碼:

可以發(fā)現,我們并沒(méi)有添加控制器中Index的POST請求,也能正常查詢(xún)。我們現在添加HttpPost方法

我們會(huì )發(fā)現,GET和POST請求的url都是一樣的,都是 localhost:xxx/Movies/Index 。假如我們想要把鏈接發(fā)給朋友,讓他知道我想看哪些電影,但是這些查詢(xún)信息卻沒(méi)有在url里面體現,這樣不肯能發(fā)送給朋友。

解決方法是利用 BeginForm 的重載,有個(gè)指定POST請求添加搜索信息到url中。

@using (Html.BeginForm(“Index”,”Movies”,FormMethod.Get))

改成如上的代碼,就可以指定用GET方法提交,哪怕你已經(jīng)有了HttpPost 的方法。

接下來(lái):添加更多搜索

把剛才測試的Index HttpPost 方法刪除,我們接下來(lái)添加一個(gè)功能,讓用戶(hù)可以按照類(lèi)型來(lái)搜索電影。同樣是修改Index的方法。代碼如下:

1234567891011121314151617181920
public ActionResult Index(string movieGenre,string searchString)    {      var GenreLst = new List();      var GenreQry = from d in db.Movie               orderby d.Genre               select d.Genre;      GenreLst.AddRange(GenreQry.Distinct());      ViewBag.movieGenre = new SelectList(GenreLst);      var movies = from m in db.Movie                 select m;      if (!String.IsNullOrEmpty(searchString))      {        movies = movies.Where(s =>; s.Title.Contains(searchString));      }      if (!string .IsNullOrEmpty(movieGenre))      {        movies = movies.Where(x =>; x.Genre == movieGenre);      }      return View(movies);    }

第三行的代碼,我們添加了一個(gè)List對象來(lái)保存從數據庫取出的電影類(lèi)型數據。第四行代碼是一個(gè)LINQ查詢(xún)。第五行代碼我們把獲得查詢(xún)結果存到LIST里面,用了 Distinct 方法,過(guò)濾重復對象。

控制器的代碼搞定后,就是修改View,在添加一個(gè)搜索框。

添加的 @Html.DropDownList(“movieGenre”,”All”)  其中的參數 moiveGenre 會(huì )去 ViewBag 里面查詢(xún)時(shí)候存在 IEnumerable<SelectListItem>的參數。在控制器的代碼中,我們給ViewBag添加了SelectList參數。

我們運行看看:

可以看出,利用MVC開(kāi)發(fā)網(wǎng)站是非常的方便,快捷。

下一節,添加新的屬性(字段)到Model(數據庫模型)中。

ASP.NET MVC5 入門(mén)九——添加新字段、數據庫遷移

發(fā)表于 2013 年 9 月 17 日 由 顏晉南

在Code First開(kāi)發(fā)中,不可能一開(kāi)始創(chuàng )建的數據庫類(lèi)就一直不變可能隨著(zhù)需求或者其他原因要做調整。假設我們在原有的Movies里面添加一個(gè)評級屬性。

然后我們運行下看看。

異常了!注釋掉剛才添加的代碼,在運行看看:

發(fā)現可以訪(fǎng)問(wèn),這是因為當EF CodeFirst的數據模型發(fā)生異動(dòng)時(shí),默認會(huì )引發(fā)一個(gè) InvalidOperationException異常。有個(gè)解決方法是,在Global.asax 里面的Application_Start方法加上 一個(gè) SetInitializer方法,這個(gè)方法會(huì )讓數據庫刪除在重新創(chuàng )建。就是因為如此,有了大量的測試數據顯然不能用這個(gè)方法!

使用Code First數據庫遷移

首先,我們刪除系統自動(dòng)創(chuàng )建的Movies.mdf文件。如下圖,如果在A(yíng)pp_Data 里面沒(méi)有看見(jiàn),請單擊顯示所有文件圖標。

然后進(jìn)入(PM)軟件包管理控制臺 (視圖——》其他窗口——》程序包管理控制臺)輸入以下指令:Enable-Migrations

出現錯誤那是因為項目中有多個(gè)數據類(lèi)別,所以需要選擇一個(gè)。重新輸入命令:Enable-Migrations –ContextTypeName MVC5DEMO.Models.MovieDBContext 來(lái)指定需要遷移的數據庫上下文。

好了,我們會(huì )發(fā)現項目中多了一個(gè)文件夾(Migrations)和Configuration.cs文件。

然后我們根據注釋的提示,修改下Seed方法的內容為如下:

1234567891011121314151617181920
protected override void Seed(MVC5DEMO.Models.MovieDBContext context)    {      context.Movie.AddOrUpdate(i =>; i.Title,        new Movie {        Title = "虎膽龍威",        ReleaseDate=DateTime.Parse("2013-03-16"),        Genre="動(dòng)作",        Price=120},        new Movie {Title = "致青春",        ReleaseDate=DateTime.Parse("2013-04-26"),        Genre="愛(ài)情",        Price=60} ,new Movie {Title = "中國合伙人",        ReleaseDate=DateTime.Parse("2013-05-18"),        Genre="劇情",        Price=90} ,new Movie {Title = "小時(shí)代",        ReleaseDate=DateTime.Parse("2013-06-27"),        Genre="腦殘",        Price=30}         );    }

添加完成后請按下 CTRL-SHIFT-B 生成解決方案

然后我們創(chuàng )建一個(gè)數據庫遷移的版本,就是初始版本。在管理控制臺輸入 add-migration Initial 其中Initial可以隨便取名。

文件夾下面多了一個(gè)日期+Initial.cs 的文件。

接著(zhù)我們在PM(程序包管理控制臺)輸入 Update-Database 指令。

這個(gè)指令會(huì )檢測剛才那個(gè)cs文件,里面包含數據庫的結構的說(shuō)明,然后運行 Seed里面的方法填充數據。然后我們F5運行看看。

一切正常!

把新屬性添加到Model

接下來(lái)我們給電影模型添加一個(gè)分級功能,類(lèi)似《小時(shí)代》少兒不宜!把我們剛剛注釋掉的再反注釋?zhuān)缓笾匦律上?。生成完后還需要修改幾個(gè)地方,如果你有自己設定Bind屬性,還要把新的字段添加進(jìn)去,同時(shí)要去視圖修改下。我們去Index.cshtml修改下:

紅色框框就是新增加的2處。同樣的,Create.cshtml也需要添加。

好了之后我們運行看看。

出現錯誤了!那是因為現在的模型已經(jīng)多了一個(gè)字段,而數據庫還沒(méi)有變化??梢杂蒙衔奶岬降淖屜到y自動(dòng)把數據庫砍掉在重新生成,或者自己手動(dòng)修改數據庫。不過(guò)這些都不是最優(yōu)的,最好的是使用Code First 的數據庫遷移。第一步,更改Seed文件,在默認的那些測試數據中添加分級信息。

然后再PM里面輸入  add-migration addRating (名字: addRating 可以隨意,最好有意義)

會(huì )發(fā)現多了一個(gè)up和down方法,記錄著(zhù)數據庫的變動(dòng)。接著(zhù)我們生產(chǎn)解決方案,然后再PM輸入:Update-database 命令。然后運行看看:

評級出現了,我們點(diǎn)擊 Create New 看看:

一切正常,都能添加。但是這樣還不夠智能,接下來(lái)我們設置自動(dòng)數據庫遷移。

自動(dòng)數據庫遷移

在Global.asax里面的 Application_Start方法加上以下代碼:

這樣以后一旦數據庫模型變化,就能自動(dòng)進(jìn)行升級。

下一步: 添加驗證 。

ASP.NET MVC5 入門(mén)十——添加驗證

發(fā)表于 2013 年 11 月 24 日 由 顏晉南

暫無(wú)評論

在本教程:將要在Movie 模型添加驗證邏輯確保用戶(hù)添加或者編輯時(shí)數據無(wú)誤。

DRY(不要重復你自己)

ASP.NET MVC 的核心設計原則之一就是DRY(Don’t Repeat Yourself)。ASP.NET MVC 鼓勵你為一個(gè)功能或者行為編碼一次,在以后需要用到的地方一直復用就可以。這樣可以減少編寫(xiě)代碼的數量,同時(shí)易于維護。

在A(yíng)SP.NET MVC 和 EF code first 中提供的驗證支持就是DRY的好例子??梢灾宦暶饕淮?,然后在任何需要的地方中執行規則。

向Movie模型中添加驗證規則

打開(kāi) Movies.cs 文件,然后我們來(lái)更新Movie類(lèi)。利用內置的 Required、StringLength、RegularExpression 和 Range Validation 特性添加以下內容:

弄完后,我們看看數據庫的設計:

顯然和規格不符,我們來(lái)修改它。先生成解決方案,接下來(lái)就是利用數據庫遷移功能自動(dòng)生成。命令如下:在軟件包管理器控制臺輸入

  • add-migration DataAnnotations
  • update-database

命令完成時(shí),VS會(huì )自動(dòng)打開(kāi)一個(gè)類(lèi)文件,我們可以看到其中的Up方法。

123456
public override void Up()        {            AlterColumn("dbo.Movies", "Title", c =>; c.String(maxLength: 60));            AlterColumn("dbo.Movies", "Genre", c =>; c.String(nullable: false, maxLength: 30));            AlterColumn("dbo.Movies", "Rating", c =>; c.String(maxLength: 5));        }

Genre 字段不再是可空的,標題和分級都添加了驗證條件。我們重新看看數據庫的設計:

已經(jīng)改過(guò)來(lái)了。相關(guān)限制條件在源碼里面很清楚了,不在細說(shuō)。

接下來(lái)我們看看效果: 進(jìn)入 localhost:****/Movies/Create

很明顯了,如果沒(méi)有通過(guò)本地客戶(hù)端的驗證,點(diǎn)擊Create是不會(huì )向服務(wù)器提交表單的。

接來(lái)下我們看看實(shí)現的過(guò)程看看在創(chuàng )建視圖和創(chuàng )建Action方法時(shí)發(fā)生了什么

先看看 MoviesController 類(lèi)中的Create方法:

會(huì )發(fā)現和以前完全一樣,沒(méi)有任何代碼上的變化。第一個(gè)Create (GET方法)是用來(lái)顯示初始創(chuàng )建的窗體。第二個(gè)(POST版本的)方法先驗證是否有錯誤(ModelStateIsValid)如果存在錯誤,則重新顯示窗體,否則就在數據庫中保存新的電影信息??蛻?hù)端實(shí)現校驗是通過(guò) javascript 假如我們禁用它看看會(huì )發(fā)生什么。禁用方法不同瀏覽器有不同的選項,搜索一下就可以。

禁用 chrome 后,刷新重新輸入:

沒(méi)錯誤提示,我們點(diǎn)擊Create

很明顯,還是有驗證,接下來(lái)我們輸入正確的看看。

成功添加進(jìn)去了,感興趣的話(huà),在movie.cs 的 POST Create請求添加斷點(diǎn),會(huì )發(fā)現輸入錯誤的信息,IsValid 是false ,輸入正確是True。

如果你添加了斷點(diǎn)測試 啟用/禁用 JavaScript 2種情況下Create方法的調用會(huì )發(fā)現,在啟用JS的情況下,如果客戶(hù)端檢測到錯誤是不會(huì )調用Action里面POST的Create方法。如果禁用了JS功能,到表單提交到服務(wù)器,會(huì )通過(guò) ModelState.IsValid 來(lái)驗證是否數據存在錯誤。

下一部分:這次改進(jìn)了 Create 方法的數據驗證,下一次就是 Details 和 Delete 方法了。

感謝作者,祝作者早日創(chuàng )業(yè)成功!


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ASP.NET MVC4 IN ACTION學(xué)習筆記
ASP.NET MVC3快速入門(mén)——第三節、添加一個(gè)視圖
ASP.NET MVC 5 學(xué)習教程:添加視圖
MVC架構開(kāi)發(fā)綜述
ASP.NET MVC 入門(mén)介紹 (上)
ASP.NET MVC 5 學(xué)習筆記:使用HandleErrorAttribute處理異常
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久