新手对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什么的,结果就出现了绚丽多彩的网页。这几行代码就有如此魔力?不是的,关键在于浏览器,正因为浏览器根据代码做了相应的处理和呈现,才有多姿多彩的网页,核心在于浏览器。如果用记事本打开,将只是几行代码而已。
最新文章
- ABP框架理论研究总结(典藏版)
- CentOS 7.x设置自定义开机启动,添加自定义系统服务
- 各大互联网公司前端面试题(HTML/CSS)
- 深入解析SQL Server并行执行原理及实践(下)
- Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理
- Hilbert-Huang Transform: matlab 希尔伯特-黄变换: matlab实现
- 突破GFW,使用node.js
- 关于解决JQUERY对INPUT元素Change事件不兼容的问题
- TYVJ 1011 NOIP 2008&;&;NOIP 2000 传纸条&;&;方格取数 Label:多线程dp
- 【crunch bang】安装firefox,删除iceweasel
- 【模拟】FOJ 2244 Daxia want to buy house
- 黑马程序员—C语言的判断语句
- linux获得目录下文件个数
- POPTEST老李分享session,cookie的安全性以及区别 1
- admui框架使用经验
- React 合并行 RowSpan
- django----Form提交按钮
- Java 容器源码分析之ConcurrentHashMap
- Chrome中安装Firebug插件
- nginx关闭全局access.log,error.log
热门文章
- Android java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230
- Android 8.0 启动后台service 出错 IllegalStateException: Not allowed to start service Intent
- JDBC链接数据库步骤
- Python操作数据库及hashlib模块
- linux mysql-workbench 创建与正式库表结构一样的表
- jquery制作动态添加表单行与删除表单行
- js 保留几位小数位数
- Vue项目搭建及原理四
- hadoop balancer
- 【[Offer收割]编程练习赛13 B】最大子矩阵(别人的思路)