• 新手对ASP.NET MVC的疑惑


    习惯了多年的WEB FORM开发方式,突然转向MVC,一下子懵了,晕头转向,好多不习惯,好多不明白,直到现在也没弄明白,只好先记下来,在应用中一一求解。


    主要集中在视图(View)这里。


    1、@Html

    视图这里到处是@Html.***,那么这个Html从哪里冒出来的?也不见有声明。

    实际上Html是ViewPage的一个HtmlHelper类型的属性,因此它无需声明。


    2、也跟这个HtmlHelper有关。

    扩展一下这个原始类型HtmlHelper,比如有以下代码

    namespace System.Web.Mvc.Html
    {
        public static class HtmlExtensions
        {
            public static string Span(this HtmlHelper helper, string strId, string strContent)
            {
                return string.Format("<span id="{0}">{1}</span>", strId, strContent);
            }
        }
    }


    在视图页面,调用如下
    @Html.Span("span1","这是一个span")


    看到没,定义的时候明明是3个参数,怎么调用时候只有2个?

    说明我长时间闭塞,已经落后太多了。

    实际上,第一个参数有this修饰符,代表该方法用于第一个参数这种类型的对象。比如在上面的代码中,Span这个方法,就是用于HtmlHelper这种类型的对象。

    3、Model

    在视图里面,Model也是一个类似Html一样的东西,无须定义就可以使用。实际上,Model是ViewData的属性。但不知道为什么,像ViewPage、ViewData这些东西都不用显示出来的。


    4、lambda表达式

    比如 @Html.TextBoxFor(m => m.Name)

    嗨!这个m又是从哪里冒出来的?总不至于,它又是谁谁谁的属性吧。其实,将m换成其他名字一样成立,比如 @Html.TextBoxFor(y => y.Name),一点问题没有。

    lambda表达式其实就是匿名函数,如 x => x*x,x是参数,x*x是函数体。并且,系统会根据函数体来猜测这个x的类型,比如在这里,x估计就是数值型。

    同样,在视图里面,我估计是有个视图引擎之类的东西会根据lambda表达式来猜测出我们想用的是那个Model对象,并且做了相应的处理。

    这并没有什么好奇怪的。就好比做网页,我们写了一些HTML代码,再嵌上一点CSS、javascript什么的,结果就出现了绚丽多彩的网页。这几行代码就有如此魔力?不是的,关键在于浏览器,正因为浏览器根据代码做了相应的处理和呈现,才有多姿多彩的网页,核心在于浏览器。如果用记事本打开,将只是几行代码而已。



  • 相关阅读:
    SystemParametersInfo调用失败的问题
    在wince下如何禁止移动窗体
    【转】WinCE控制面板添加应用程序
    CE6.0 下获得 SD 卡序列号的方法
    SetSystemMemoryDivision 的用法
    两经纬度之间的距离计算
    PC 上访问设备数据库的方法
    通过程序模拟鼠标按下
    车牌号
    比较字母大小
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257964.html
Copyright © 2020-2023  润新知