Mvc3(1)

摘录于Pro ASP.NET MVC3 Framework一书:

一. Web Form的缺点

1. view state weight:    view state 中保存的数据在每次HTTP请求中来回传递,且包含的数据量可以达到很大,导致用户响应时间比较慢,增加了带宽要求

2.页的生命周期相当复杂

3.html的访问性更差   服务器控件最终以纯HTML形式呈现,但往往不是以WEB标准呈现的,导致不能很好的利用CSS,且服务器控件呈现生成不可预知、复杂的ID,导致用JS很难访问到

4.紧密的架构不适合用unit testing

二、DI(dependency inject)依赖注入

减少组件的耦合度,用到的容器为Ninject

    public interface IA
    {
        void fun_A(String str);
    }

    public class A : IA
    {
        public void fun_A(String str)
        {
            Console.WriteLine("{0}", str);
        }
    }

    public interface IB
    {
        void fun_B();
    }

    public class B : IB
    {
        private IA ia;
        public B(IA iaa)
        {
            ia = iaa;
        }
        public void fun_B()
        {
            ia.fun_A("test in interface IA");
        }
    }

    public class C
    {
        private IB ib;
        public C(IB ibb)
        {
            ib = ibb;
        }
        public void GoTest()
        {
            ib.fun_B();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IKernel kernel = new StandardKernel();
            kernel.Bind<IB>().To<B>();
            kernel.Bind<IA>().To<A>();
            IB b = kernel.Get<IB>();
            C cc = new C(b);
            cc.GoTest();
            Console.ReadKey();
        }
    }

//类C 依赖于接口IB, 实现IB的类B又依赖于接口IA,   也可以说是:类C依赖于接口IB,接口IB又依赖于IA,这样就形成了一条依赖链,用DI容器可以自动完成相互依赖的接口的实现类的实例的创建【面向接口编程】

//用DI容器后,它会自动去理清这条链,然后创建相应的实现类实例,并传给相应的构造函数,【也叫构造函数注入】

//依赖注入有三种方式:A.Constructor Injection  B.Setter Injection   C.Interface Injection

三、Layout
如果不想引用母版页,则必须@{Layout = null;}
如果没有这样指明,则默认为引用ViewStart.cshtml作为母版,而ViewStart.cshtml引用的是_Layout.cshtml,
所以没有指明的情况下,则是引用_Layout.cshtml作为母版的。

四、Html.RenderPartial与Html.RenderAction

  //这两个方法都是用来在界面上嵌入用户控件的

  (1)Html.RenderPartial("LogOnUserControl");

  //LogOnUserControl是一个partial view名,也就是在这个view中定义一个用户控件,这个view必须放在调用者同一目录下,也可以放在View/Shared中。可以看出,这个方法是依赖于一个partial view的  

  (2)Html.RenderAction     

  //从方法名上就可以看出这个方法依赖于Action【调用某个Action对应的View】,  例如:

  Html.RenderAction("Menu", "Nav");

  //Menu是Action名,此时会调用Menu对应的View,Nav是这个Action所在的Controller名

原文地址:https://www.cnblogs.com/notebook2011/p/2799613.html