一、ASP.NET MVC概述
1、什么是ASP.NET MVC?
ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架。
是微软继ASP.NET WebForm后的又一种开发方式,而非替代方式。
2、官方网站和源码网站?
3、ASP.NET MVC的特点?
1)、分离任务
2)、可扩展
3)、强大的URL重写(路由)机制
4)、兼容ASP.NET现有的技术
5)、开源
4、ASP.NET MVC的优点?
1)、通过把项目分为model、view和controller,使得复杂项目更加容易维护。
2)、没有使用viewstate和服务器表单控件,可以更方便的控制应用程序的行为。
3)、应用程序通过controller来控制程序请求,可以提供丰富的url重写。
5)、在团队模式下表现更加出众。
5、为什么我们需要ASP.NET MVC?
1)、关注点分离
2)、高扩展性
3)、更好的可测试性
4)、更好的URL重写
5)、更好的性能
6)、更加灵活的HTML代码控制
...
6、Razor视图引擎?
Razor视图引擎是对以代码为焦点的方法实现,其特点如下:
1)、简洁、富于表现、流畅,尽量减少编写一个视图模板所需要敲入的字符数,实现快速流畅的编程工作。不必为了明确标记出服务模块的开始和结束而中断编程,Razor解析器能从你的代码中自动推断出来。
2)、易于学习,熟悉现有的编程语言和HTML技能就能快速学会。
3)、可以在任何文本编辑器中工作。
4)、VS IDE对其增加了智能提示。
5)、支持单元测试。

7、ASP.NET MVC请求处理过程?
8、ASP.NET MVC3与MVC4 知识点?
9、ASP.NET MVC与Web Form区别?
二、ASP.NET MVC编程要点
1、@Html.DisplayNameFor(mode=>model.Name),默认会直接输出属性名称,如果属性名称想要显示中文,可在类属性定义一个System.ComponentModel下DisplayName属性,如:
[DisplayName(“名称”)]
public string Name {get;set;}
使用Razor语法输出属性,默认所有数据都会使用HTML编码(HtmlEncode)输出,这是出于程序安全考虑,可避免网页遭受跨网站脚本攻击(Cross-Site ScriptingAttach)。
2、@model IEnumerable<命名空间.类名>
3、@{ ViewBag.Title=”页面标题”;}
4、@Html.ActionLink(“Create New”,”Create”)
5、@Html.ActionLink(“Edit”,”Edit”,new{id=item.Id})
用来输出超链接,第一个参数是链接显示文字,第二个参数是链接的目的Action名称,第三个参数代表路由参数id。这样MVC在输出超链接时,会加上要传给下一页的路由参数,MVC知道传入{controller}与{action}路由参数外,还给予{id}路由值。
Controller里有两个同名的方法,一个给HTTP GET方法用的,另一个是给HTTP POST方法用的。有HttpPost属性的会告知MVC框架此动作只会接收HTTP POST过来的信息,这个属性称为动作过滤器(Action Filter)或者动作选择器(Action Selector)。
// GET: /Home/Create
public ActionResultCreate()
{
return View();
}
// POST: /Home/Create
[HttpPost]
public ActionResultCreate(Collectorcollector)
if (ModelState.IsValid)
{
db.Collectors.Add(collector);
db.SaveChanges();
returnRedirectToAction("Index");
}
returnView(collector);
6、Html.BeginForm()方法,该辅助方法将会输出<form>标签,而且必须以using包起来,如此便可在using程序代码最后退出后,让MVC补上</form>标签。
@using (Html.BeginForm()) {}
@Html.ValidationSummary(true)用来显示当表单域发生验证失败时,显示的错误消息。
@Html.LabelFor(model=>model.Name)用来显示特定字段的显示名称,会输出包含<label>标签的域名,它与@Html.DisplayNameFor(model=>model.Name)的区别如下图所示:
@Html.EditorFor用于输出表单域
@Html.ValidationMessageFor用于显示字段验证的错误消息。
在Model类中,需要必填属性上加一个System.ComponentModel.DataAnnotations命名空间下的Required属性,如下所示:
[Required]
这是MVC引入了一种Unobtrusive的JavaScript开发风格。
跳转Action,当前Action名为Create,语法如下:
return RedirectToAction(“Index”);
ModelState.IsValid用来判断在模型(Model)的验证状态是否有效,如果验证都没有问题,就可以利用Entity Framework标准的方法将数据写入数据库。
@Html.HiddenFor(model=>model.ID),该辅助方法主要用来生成HTML窗体的隐藏域。
路由Routing---网址路由,主要有2个目的:
1)、比对通过浏览器传过来的HTTP请求。
2)、响应适当的网址给客户端浏览器。
客户端请求->URI Routing->Route->RouteHandler->HttpHandler
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
所有*.axd结尾的网址通常都代表着其中一个HttpHandler,如在ASP.NET WebForm中常用的WebResource.axd就是其中一个常见的HttpHandler。为了不让MVC把这些*.axd的HttpHandler视为MVC运行起来,所以必须添加这条IgnoreRoute规则,将其排除在MVC运行生命周期之外。