MVC进阶讲解+小技巧-乱七八糟
- 没有数据回传
- 没有在页面中保存视图状态
- 开发者可以完全掌控页面的呈现过程
RenderSection("seciton名称",false) 后面为False时,为子页面可以不重写,为True时,子页面必须重写
RenderBody(),子页面默认就是body
@helper 可以定义方法
@helper king(string str){@str}@for (int i = 0; i < 10; i++){@king(i.ToString());}
MVC对应关系,命名规范,映射文件名
Attribute :Get/Post
Filter
Html.Raw
http://www.cnblogs.com/leoo2sk/archive/2008/11/01/1324168.html
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇:ASP.NET MVC全局观
约定大于配置 约定优于配置是一个简单的概念。 系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置。 在大部分情况下,你会发现使用框架提供的默认值会让你的项目运行的更快。
- 能够享受代码提示功能
- 能够获得重构工具的支持
- 能够在编译期发现更多错误
MVC Action Filter
ASP.NET MVC Framework支持四种不同类型的Filter:
- Authorization filters – 实现
IAuthorizationFilter接口的属性
. - Action filters – 实现
IActionFilter接口的属性
. - Result filters – 实现
IResultFilter接口的属性
. - Exception filters – 实现
IExceptionFilter接口的
属性.Filter的默认的执行顺序按上面的列表中顺序进行。如验证(authorization)Filter永远都是最开始执行的,异常(exception)Filter永远都是最后执行的,当然你也可以根据需要通过Order属性设定过滤器执行的顺序。ASP.NET MVC Framework支持四种不同类型的Filter:
Authorization filters – 实现IAuthorizationFilter接口的属性.
Action filters – 实现IActionFilter接口的属性.
Result filters – 实现IResultFilter接口的属性.
Exception filters – 实现IExceptionFilter接口的属性.
Filter的默认的执行顺序按上面的列表中顺序进行。如验证(authorization)Filter永远都是最开始执行的,异常(exception)Filter永远都是最后执行的,当然你也可以根据需要通过Order属性设定过滤器执行的顺序。
示例代码
全局筛选器
//Global里加入筛选器
filters.Add(new LoginCheckFilter());
public class LoginCheckFilter : IAuthorizationFilter
{
//所有的代码都会进到这里 类似于 设置*号的 IHttpHandler
public void OnAuthorization(AuthorizationContext filterContext)
{
var strUrl = filterContext.HttpContext.Request.Url;
if (strUrl.ToString().Contains("UserLoginError"))
{
filterContext.HttpContext.Response.Write("我报错了");
filterContext.HttpContext.Response.Redirect("http://baidu.com");
}
}
}
Controller筛选器
[LoginCheckAuth]//这里加入标记,也可以加到Controller上面
public ActionResult UserLogin()
{
return View();
}
public class LoginCheckAuth : AuthorizeAttribute
{
//返回Ture或者是False,能访问,或者是不能访问。可以用于权限判断
//加了【LoginCheckAuth】的才会调用到这里,适合做权限控制
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var CheckLogin = httpContext.Request.Url;
httpContext.Response.Write("我YueQuan了");
return false;
}
}
扩展:httpHandler使用(类似Controller筛选器)
HttpHandler,Http请求的处理者,例如ScriptHandler、WebServiceHandler,IHttpHandler的实现都是为了处理某一类的请求。如ScriptHandler负责处理对脚本的请求。
当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。
对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandler Factory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。
一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。
<!--IIS7,需要加到system.webServer节点下-->
<system.webServer>
<handlers>
<add name="JpgHander" verb="*" path="*.jpg" type="MvcAuthFilterClass.CheckKingHandler, MvcAuthFilterClass, Version=1.0.0.0, Culture=neutral"/>
</handlers>
</system.webServer>
public class CheckKingHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Write("我进了,我是CheckKingHandler");
}
public bool IsReusable
{
get { return true; }
}
}
扩展:httpModule使用(类似筛选器(AuthorizationFilter))
HttpModule,Http模块。实际上就是那19个标准事件的处理者,或者说19个标准事件的订阅者,比如OutputCacheModule,SessionStateModule。
负责监听HttpRequest,同时对HttpRequest增添或者过滤掉一部分内容。也就是说,当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。
HttpModule实现了接口IHttpModule,我们可以自定义实现该接口的类,从而取代HttpModule。<!--IIS7,需要加到system.webServer节点下-->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" >
<add type="MvcAuthFilterClass.CheckKingModule, MvcAuthFilterClass, Version=1.0.0.0, Culture=neutral" name="kingModel"/>
</modules>
</system.webServer>
public class CheckKingHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//通过外层筛选的,才会进 如 verb="Get" path="*.jpg",必须是Get请求,路径是*.jpg
context.Response.Write("我进了,我是CheckKingHandler");
}
public bool IsReusable
{
get { return true; }
}
}
public class CheckKingModule : IHttpModule
{
public void Init(HttpApplication context)
{
//所有的都会进,这里做处理
}
public void Dispose()
{
}
}
附件列表