时间和篇幅所限,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