時間和篇幅所限,MVC不會介紹基本的建站過程,請參照博客園技術專題文章 傳送門 英語足夠好的請直接去微asp.net 官網 傳送門 (強烈推薦,尤爲是想使用最新技術的時候更應該直接去官網),本文主要介紹什麼呢?就像高中的時候你在作數學題,有地方不會了,去看看參考答案怎麼玩的,對!本文目標就作這個,作一個參考答案同樣的東西。告訴你們這些東西怎麼用,最好在何時用的經驗。html
(挖坑1)有朋友問建站後部署的問題,將在本章最後講解,我會提出兩個發佈方式一個操做簡單的【本地文件】,一個絕對便利的【web deploy】。web
這一節主要講解一些我使用mvc將近一年所遇到的坑與項目中的活用方法以及一些進階意見。數據庫
Asp.net MVC本質上仍是Asp.NET,熟悉它的管道機制,他如何將request轉化成response等等問題將會對整個項目拓展有極大的幫助。博客園有相應文章,請你們自行搜索,這裏就不重複造輪子了。express
關於網站架構問題,我是挺老一批寫asp.net網站的人(雖然我年齡不大。。。),從微軟當初的一個三層架構的demo開始就一直在研究架構問題,反覆琢磨過馬丁大叔的《企業應用架構模式》,對於架構的意見就是,不要過分架構。多大的活多大的架構,有的甚至三層都用不上。沒有必要在細化若干層去。我曾在codeproject看過一個通信錄項目,拋出爲了展現DDD架構理念這一目的,就是典型在過分架構了。我的團隊崇尚敏捷開發,若是是足夠了解Asp.NET MVC內在運行機理,那你會發現不少的地方能夠拓展使用徹底不必把造輪子這種活動放到本身的身上。在這裏推薦蔣金楠先生的《ASP.NET MVC 4框架揭祕》(我不是書拖,這本書也不適合初學者),不喜歡看實體書的去他的博客傳送門。講解的很深刻不過須要必定編程功底。編程
閒話少說,本節乾貨開始c#
1》使用分部視圖增長網站重用性架構
請看最下面的圖,單品拍賣,主題拍賣,最新動態都是分佈式圖,而在項目中我最經常使用的兩種建立分佈式圖的方法是mvc
//Action參數爲視圖名稱 ,調用子操做返回一段HTML代碼 @Html.Action("PartialNewRank") //Partial,不走Controller裏面的Action,直接對應物理文件 @Html.Partial("_Page")
這兩個具體在項目中怎麼用呢app
1)Partial這個方法能夠作一些只須要靜態HTML代碼就能夠完成的動做,好比整個頁面最下方的框架
2)Action這個方法適合作一些頁面內容不固定須要從數據庫裏面取數據在渲染到頁面上的地方
好比下面這個最新排行,主題拍賣這些都是從一個【子方法】中拿到的html代碼段添加到主頁面上來的。
注1:)單品拍賣是瀑布流,使用的是Ajax,(挖坑2)有朋友說但願知道Ajax在項目中是怎麼用的,這章後面小節會介紹
注2:)@Html.Action顧名思義,必然要在controller裏面有一個Action函數,和你正常寫一個View視圖是同樣的。只不過返回的時候要使用PartialView()這個方法,固然是用View()也是能夠的
public ActionResult Test() { //作業務處理,從數據庫讀數據 return PartialView(); }
注3:)這兩個方法均可以傳參數的
//就像這樣 @Html.Action("NewDynamic", new { id=100}) @Html.Partial("_Page", new { id=100})
那有朋友就要問了,Partial方法不是不能走Action麼,那怎麼接受參數呢,方法就是強類型在頁面頭上寫強類型
@model string <div> id是@Model 是的沒錯,還能這樣。。。 </div>
ok第一個問題講完。下一個乾貨
2》在項目中使用Razor
我記得微軟一位MVP在Codeproject上講了一個段子,我在四處找Razor的語法教程,不過最後我發現原來它不須要教程。是的,這句話沒錯,他不須要系統的教程,你只須要知道每一個頁面能夠有一個Model就哦了。而後想用什麼加一個‘@’標識符就能夠寫C#代碼,使用」@{這裏寫c#代碼}「來標識一段C#代碼,代碼段能夠出如今任何位置,而且能夠和HTML混寫,可是 坑 來了 ,一件藝術品10000元,頁面上展現 「人與森林10000元」 代碼多是這樣的:注1)Art是一個class,裏面有一個屬性Price
人與森林@Model.Art.Price元
對不起,Razor引擎不識別他會把"Price元"做爲一個總體當成Art的一個屬性,怎麼辦?
填坑1》Price與元之間打一個空格,代碼以下
人與森林@Model.Art.Price 元
ok,ok徹底能夠,這下Razor不能把"Price元"做爲一個總體了,不過頁面展現的時候也會有一個空格,會變成這樣「人與森林10000 元」。
這麼看好像沒問題,作大做業好像沒人會挑,一切都很好了。不過,爲何不這麼幹
填坑2》使用"@(expression)"綁定一個表達式,代碼是這樣的
人與森林@(Model.Art.Price)元
good!圓滿解決,一切都和諧了。
3》Razor中使用using引入類庫
作過度頁的同窗應該都會知道Webdiyer,通常回在項目裏面這麼寫經過using引入分頁的dll
@using Webdiyer.WebControls.Mvc @model PagedList<AuctionStationAdmin.Modules.Bll.Derivative> @{ Layout = "~/Views/Shared/_Layout.cshtml"; } <div>內容展現</div> @*分頁*@ <div style="text-align:center; margin-left:-2em;"> @Html.Pager(Model, new PagerOptions { HorizontalAlign = "center", ShowFirstLast = false, CssClass = "pagination pagination-lg", NavigationPagerItemWrapperFormatString = "<li>{0}</li>", ContainerTagName = "ul", PageIndexParameterName = "id", ShowPageIndexBox = false, PrevPageText = "<<", NumericPagerItemCount = 5, Id = "pages", NextPageText = ">>", CurrentPagerItemWrapperFormatString = "<li class=\"active\"> <a>{0}</a> </li>", NumericPagerItemWrapperFormatString = "<li> {0}</li>", }, new { style = "margin-top:2em;margin-bottom:2em" }) </div>
可是你能夠這樣在每一個View下面都有一個Web.config
裏面有這樣一段
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="AuctionStation.Web" /> <add namespace="Webdiyer.WebControls.Mvc" /> </namespaces> </pages> </system.web.webPages.razor>
注意到了沒,<add namespace="Webdiyer.WebControls.Mvc" />,這麼一來就不須要在每一個須要分頁的View裏面寫using了。
注1)你須要再添加完上面的代碼後將這個View文件夾裏面的打開在編輯的頁面都關掉,從新打開纔會識別添加進去的namespace
時間很少本次先寫到這裏,感謝各位捧場。本章回下一節將會繼續挖坑填坑。祝各位好運。
----from,Yeanzhi