习惯了多年的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什么的,结果就出现了绚丽多彩的网页。这几行代码就有如此魔力?不是的,关键在于浏览器,正因为浏览器根据代码做了相应的处理和呈现,才有多姿多彩的网页,核心在于浏览器。如果用记事本打开,将只是几行代码而已。

最新文章

  1. ABP框架理论研究总结(典藏版)
  2. CentOS 7.x设置自定义开机启动,添加自定义系统服务
  3. 各大互联网公司前端面试题(HTML/CSS)
  4. 深入解析SQL Server并行执行原理及实践(下)
  5. Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理
  6. Hilbert-Huang Transform: matlab 希尔伯特-黄变换: matlab实现
  7. 突破GFW,使用node.js
  8. 关于解决JQUERY对INPUT元素Change事件不兼容的问题
  9. TYVJ 1011 NOIP 2008&amp;&amp;NOIP 2000 传纸条&amp;&amp;方格取数 Label:多线程dp
  10. 【crunch bang】安装firefox,删除iceweasel
  11. 【模拟】FOJ 2244 Daxia want to buy house
  12. 黑马程序员—C语言的判断语句
  13. linux获得目录下文件个数
  14. POPTEST老李分享session,cookie的安全性以及区别 1
  15. admui框架使用经验
  16. React 合并行 RowSpan
  17. django----Form提交按钮
  18. Java 容器源码分析之ConcurrentHashMap
  19. Chrome中安装Firebug插件
  20. nginx关闭全局access.log,error.log

热门文章

  1. Android java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230
  2. Android 8.0 启动后台service 出错 IllegalStateException: Not allowed to start service Intent
  3. JDBC链接数据库步骤
  4. Python操作数据库及hashlib模块
  5. linux mysql-workbench 创建与正式库表结构一样的表
  6. jquery制作动态添加表单行与删除表单行
  7. js 保留几位小数位数
  8. Vue项目搭建及原理四
  9. hadoop balancer
  10. 【[Offer收割]编程练习赛13 B】最大子矩阵(别人的思路)