2014年5月25日星期日

ASP.NET MVC学习之模型绑定(2) - y-z-f

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
ASP.NET MVC学习之模型绑定(2) - y-z-f  阅读原文»

ASP.NET MVC学习之模型绑定继续

3.手工调用模型绑定

很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了很多过程中的控制,所以我们就需要使用手工的方式进行绑定。下面我们通过一个例子来说明,首先打开Views/Home/Index.cshtml页面,并输入如下代码:

1 @{
2 ViewBag.Title = "Index";
3 }
4
5 @if (TempData.ContainsKey("msg"))
6 {
7 <h1>
8 @TempData["msg"].ToString()
9 </h1>
10 }
11
12 @using (Html.BeginForm())
13 {
14 <input type="text" name="id" />
15 <input type="submit" value="submit" />
16 }

接着打开HomeController并写入如下代码(关于ActionName可以点击这进行参考):

1 namespace MvcStudy.Controllers
2 {
3 public class HomeController : Controller
4 {
5 private class TestA
6 {
7 public String id { get; set; }
8 }
9
10 public ActionResult Index()
11 {
12 return View();
13 }
14
15 [HttpPost]
16 [ActionName("Index")]
17 public ActionResult IndexPost()
18 {
19 TestA ta = new TestA();
20 UpdateModel(ta);
21 TempData["msg"] = ta.id;
22 return View();
23 }
24 }
25 }

这里我们通过UpdateModel进行手动绑定,最终的结果和采用形参的方式相同,读者可以进行测试可以发现输入的值都显示了,但是读者一定会奇怪,因为TestA中的id不仅仅存在于表单,同时还存在与RouteData中以及查询字符串中,我们可以用?id=123来测试这个页面可以发现并不会修改最终结果,而通过手动调用模型绑定的优点之一就是我们可以控制数据来源,比如我们修改HomeController代码如下所示:

1 [HttpPost]
2 [ActionName("Index")]
3 public ActionResult IndexPost()
4 {
5 TestA ta = new TestA();
6 UpdateModel(ta,new FormValueProvider(ControllerContext));
7 TempData["msg"] = ta.id;
8 return View();
9 }

这里我们可以发现我们给UpdateModel传递了第二个参数,FormValueProvider这表示数据源只能来自于表单中,同样我们还可以修改成RouteDataValueProvider或者QueryStringValueProvider,具体的效果读者你自行替换之后,输入http://localhost:1201/Home/Index/123?id=asdsad测试,可以看看最后显示的内容是不是来自于我们指定的来源。再使用形参的方式中我们有时会遇到http流中不存在我们需要的值,并且这个形参的类型不能为null,或者我们不希望它为null,这个时候就会出现异常或者赋值为null,而通过UpdateModel则可以通过try…catch…的形式捕获InvalidOperationException异常从而手动处理,如果读者不希望通过这种方式也可以像下面这种形式来处理:

1 一个合格的前端工程师必看的书籍 - EXE-DREAM  阅读原文»

以我的经验,大部分技术,熟读下列四类书籍即可。

  1. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列
  2. 全面,巨细无遗地探讨每个细节,遇到疑难问题时往往可以在这里得到理论解答,如Definitive Guide/Programming xx系列
  3. 实践,结合实际中经常遇到的情景环境,来描述如何设计和解决问题,如cookbook系列
  4. 深入,讲解一些文化,思路,甚至于哲学上的东西,真正做到深入一种语言去编程,如unix编程艺术,程序员修炼之道等等

那么,目前为止我认为最好的书是:

css:

  1. 入门: Head First HTML and CSS, XHTML (中文版,第二版)这本2005年底的书依然是最易懂,清晰和正确的入门读物,去看看amazon排名就知道了
  2. 全面: CSS, The Definitive Guide (3th Edition) (《CSS权威指南(第3版)》)Meyer可能是css领域最权威和知名的作者,他在这本书里讲解了每个细节的实现和原理,更详细的东西恐怕只能从w3c那几乎不可读的文档中去寻找了
  3. 实践:CSS Mastery (2th Edition) (《精通CSS:高级Web标准解决方案(第2版)》)Andy budd恐怕是英国最出色的css作者,这本书用简单直接的方式论述了很多实践中组件的正确实现以及可替代方法,包括css3
  4. 深入:很遗憾,css在这方面还没有一本必读著作,也可能并不需要,因为到了这个程度,多是用户体验和视觉设计了,目前最接近的是 Transcending CSS (《超越CSS:Web设计艺术精髓(修订版) 》), 但不断的技术进化使得书中某些部分感觉有些落伍。


关于css3, 她是一个模块化的渐进式增强,且以2.1为基础,因此,请学好css2再学习css3,这方面我认为只需要一本实践书即可,告诉你css3能做到什么,毕竟,原理是共通的。

The Book of CSS3 推荐这本,一个技术人员写的组织清晰的css3模块描述和实践指南,还包括浏览器的实现情况,2011年5月出版,是目前为止最好的。

javascript:

  1. 入门:Eloquent Javascript 一位hacker写的编程入门,书中向hacker,open source, free software的欣赏和痴迷比比皆是, 比如官网下边那个向emacs致敬的console。作者很聪明,这本书的目标读者,beginners, 是不会因为这些小细节而向他叫好的。他想要的,只是把在其中浸淫多年的,真正意义上的编程精神,传达给初学者们而已。 少见地打败了对应的HeadFirst系列(Headfirst Javascript)
  2. 全面:Javascript, The Definitive Guide(6th edition) (《JavaScript权威指南(第6版)》)伴随我们web开发者成长的一本javascript圣经,一直以来都是无可争议的最好与最全面的js书籍,2011年出版了最新版。
  3. 实践:在目前的web开发环境中,我们都是在使用各种js框架,很少自己写框架来开发,因此这本书的位置,应该留给你所使用的框架。如果是jquery,我推荐 Jquery: Novice to Ninja (《JQUERY从菜鸟到忍者(第2版) 》)这本,框架方面的书,经常一本入门的就够了,因为更新实在太快,之后的研究学习只能全靠网络了。
  4. 深入:与css不同,js是一种真正的编程语言,所以对他的深入研究是一个长期的过程,css的深入更偏向技艺/工匠,而js更偏向设计/架构/艺术,我推荐以下几本从不同方面深入js的书,他们都是业界最顶级的js开发团队(yahoo)的成员和同事,因此思路是很统一的,著名的高性能网站建设指南1和2都出自这个团队。
  • Javascipt, The Good Parts (《JavaScript语言精粹(修订版) 》)由JSON的发明者撰写
  • Javascript Patterns (《JavaScript模式》)YSlow的合作开发者撰写
  • High Performance Javascript 最好的zakas的书,虽然我不太喜欢他

附上一些即将出版,我非常想看的书,有先睹为快的朋友可以分享一下心得:

    • Secrets of Javascript Ninja (好像没有中文版)Jquery作者John Resig最新著作
    • Node: Up and Running 认识一下流行的no-block js server
    • Javascript Web Applications (《基于MVC的JavaScript Web富应用开发》)这本号称是对当下js landscape的总结

转载自:财富江湖。更多好文章,程序员创业必看知识请点击:http://caifujianghu.com/article/qiongren-shi-ruhe-yuelai-yueqiong.html/ref=3k91


本文链接:一个合格的前端工程师必看的书籍,转载请注明。

阅读更多内容

没有评论:

发表评论