MVC进阶讲解+小技巧-乱七八糟

开发步骤
1、建立项目
2、建立文件夹
3、建立Controllers
4、生成页面
5、编写Html+Js
6、编写异步请求的Action的方法,返回部分页(用于分页)
7、Js中显示部分页

8、增加新增按钮,增加Add的Action,并生成页面
9、新增页面Html+Js,增加保存Js方法,$.post到SaveAction,保存成功后关闭页面



http://www.cnblogs.com/wlb/archive/2009/12/07/1618954.html
第一次接触到MVC,才知道,什么是真正的Web开发;Html怎么运作,怎样传值,怎么样赋值;
  • 没有数据回传
  • 没有在页面中保存视图状态
  • 开发者可以完全掌控页面的呈现过程 


统一权限如何做到的(权限控制)、数据验证、开发技巧(分页、批量提交、异步等)  

MVC权限控制:Auth认证
数据验证:前台JS,$.Post后台验证,AjaxForm 提交; 用吴乐章的验证控件
常用Demo:
    增、改:验证代码,提交代码;绑定代码
    批量新增:[0].Name  方式提交
    查:分页列表,部分页处理
    删除:$.Post 提交
    分页列表,上传方法
进阶知识:
在ASP.NET MVC中约定,以“_”开头的文件在浏览器上面是不能访问的
_ViewStart.cshtml定义了Layout,作用域,当前文件夹
_Viewstart.cshtml是一个在呈现View文件的时候的启动文件,会在所有View(.cshtml)被执行之前执行,主要用于一些不方便或不能在母版(_Layout.cshtml)中进行的统一操作,譬如你有很多个没有继承关系的母版或不使用母版的单页。
@section 在指定位置显示代码,主要用于Js顺序和,CSS顺序
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全局观

 

   
 


小技巧,快速开发:
 调试:ReAttach或者Ctrl+Alt+P(调试,附加)
 接口跳转 :“查找所有引用”
 查找文件或者是方法名: Ctrl+,(编辑,定位)
 查找:Ctrl+F,Ctrl+Alt+F
 块状选择: Alt+选择
 代码生成:Alt+Shift+F10、for+Tab+Tab、Ctrl+E D
 代码提取:提取方法

扩展信息
 

约定大于配置 约定优于配置是一个简单的概念。 系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置。 在大部分情况下,你会发现使用框架提供的默认值会让你的项目运行的更快。

零配置并不是完全没有配置,而是通过约定来减少配置, 减少 XML

一直说C#是强类型语言,通俗地讲,便是指C#中的“变量”在开发时的类型便是明确的
  • 能够享受代码提示功能
  • 能够获得重构工具的支持
  • 能够在编译期发现更多错误
MVC纵向切割了开发过程中的代码,从服务器到浏览器层层分离,层次之间耦合度很低,因为它是顺着底层的开发脉络进行封装,所以有利于开发者对整个程序过程流转的理解。
不能被重用无法封安装,适合轻量级的开发,正好Web开发恰恰就是轻量级的,因为硬件,网络的限制也不需求 过于复杂的逻辑
WebForm 大量的组件因为硬件的瓶颈无法给WebForm带来什么优势 ;代码的封装是靠牺牲运行效率来提高开发效率,牺牲的运行效率通过提高硬件性能来解决



MVC Action Filter

ASP.NET MVC Framework支持四种不同类型的Filter:

  1. Authorization filters – 实现IAuthorizationFilter接口的属性.
  2. Action filters – 实现IActionFilter接口的属性.
  3. Result filters – 实现IResultFilter接口的属性.
  4. 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会调用HttpHandlerProcessRequest成员方法来对这个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()

            {


            }

        }










附件列表

     

    posted @ 2015-12-24 13:43  cn_king  阅读(573)  评论(0编辑  收藏  举报