zoukankan      html  css  js  c++  java
  • 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()

              {


              }

          }










    附件列表

    • 相关阅读:
      【SpringMVC】SpringMVC系列15之SpringMVC最佳实践
      【SpringMVC】SpringMVC系列14之SpringMVC国际化
      could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of(maven报错)
      ubuntu14安装tensorflow并测试
      HTMLajax跨域向服务器写入数据
      eclipse的最新版本luna的中建立svn和maven
      关于equals与hashcode的重写
      会计中的冲销和红票
      dubbo在项目中的应用
      dubbo介绍以及创建
    • 原文地址:https://www.cnblogs.com/jzb-dev/p/5072797.html
    Copyright © 2011-2022 走看看