Asp.net mvc 2 in action 笔记-1 概述、Model

受Rails成功的影响,很多的开发框架都加入了rails成功的MVC思想,如.net世界的Castle Subsonic等,微软发布的框架Asp.net MVC作为后来者,吸取了很多好的思想,而且作为微软的官方支持,代码开源,因此估计asp.net的Web开发世界这个会成为主流。

本系列是看的图书《Asp.net mvc 2 in action》的一个笔记整理

约定

■ Content—类似CSS 和图片的静态文件

■ Controllers—控制器类

■ Models—模型类

■ Scripts—JavaScript 文件

■ Views—视图

Model

第2,8章

presentation model 弱类型

使用ViewData TempData传递过来的数据模型,这个结构是个字典

ViewData:把数据传递给视图的容器

TempData is a collection that you can use to store data. It will be persisted in server Session memory for one round-trip.

例子1:简单的形式

如控制器HomeController.cs中传入

        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
            return View();
        }

index.aspxs使用

<%= Html.Encode(ViewData["Message"])

例子2:数据提交

Index.aspx

<form method="post" action="/GuestBook/Sign">
        <%= Html.Label("Name") %>
        <%= Html.TextBox("Name") %>
        
        <%= Html.Label("Email") %>
        <%= Html.TextBox("Email") %>
        
        <%= Html.Label("Comments") %>
        <%= Html.TextArea("Comments", new { rows=6, cols=30 }) %>
        <input type="submit" value="Sign" />
    </form>
 
   GuestBookController.cs参数的自动绑定,不区分大小写
 public ActionResult Sign(string name, string email, string comments)
        {
            //do something with the values, such as send an email
 
            ViewData["name"] = name;
            ViewData["email"] = email;
            return View("ThankYou");
        }

presentation model 强类型

上例2的增强

首先定义模型

    public class GuestBookEntry
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public string Comments { get; set; }
    }
Index.aspx 从ViePage<T> 继承[IDE中Add View向导添加]
Inherits="System.Web.Mvc.ViewPage<GuestBookWithModel.Models.GuestBookEntry>" %>
   <% using (Html.BeginForm()) {%>
         <fieldset>
            <legend>Fields</legend>
            <p>
                <%= Html.LabelFor(model => model.Name) %>
                <%= Html.TextBoxFor(model => model.Name) %>                
            </p>
            <p>
                <%= Html.LabelFor(model => model.Email) %>
                <%= Html.TextBoxFor(model => model.Email) %>                
            </p>
            <p>
                <%= Html.LabelFor(model => model.Comments) %>
                <%= Html.TextAreaFor(model => model.Comments) %>                
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
 
    <% } %>    

控制器 GuestBookController.cs

       public ActionResult Index()
        {
            var model = new GuestBookEntry();
            return View(model);
        }
 
        [HttpPost]
        public ActionResult Index(GuestBookEntry entry)
        {
            //hang on to the submitted value, so we can
            //retrieve it upon redirect
            TempData["entry"] = entry;
            return RedirectToAction("ThankYou");
        }
 
        public ActionResult ThankYou()
        {
            if(TempData["entry"] == null)
            {
                //somehow they got here without filling out the form
                return RedirectToAction("index");
            }
 
            var model = (GuestBookEntry) TempData["entry"];
            return View(model);
        }

以上可见,强模型增加了可维护性,而且对于视图的自动化处理提供了支持[因为模型的元数据信息存在]

domain models

第23章提供了Nhibernate构建领域模型的详细实例

当然现在有Ado.net Entity,估计这个使用起来更方便,可以可视化的进行建模

时间: 2024-09-22 14:25:57

Asp.net mvc 2 in action 笔记-1 概述、Model的相关文章

Asp.net mvc 2 in action笔记 -5 MvcContrib 测试和其他

MvcContrib 第5章 MvcContrib Grid 和带进度的文件上载的使用 MVcContrib是社区开源的asp.net mvc增强和扩展库,如其中的Grid,即可高效的进行设计又可灵活的控制表格的布局[比Web Form 的GridView简化了不少] 在Codeplex.com上可以找到该项目,上面有文档,特别对于Grid有详细的例子参考,如下图 例子在MVCContrib.Extras.release.zip中 以下是帮助[在MVCContrib.release.zip中]

Asp.net mvc 2 in action 笔记- 4 自动代码生成、校验Validation

自动代码生成 T4 (Text Template Transformation Toolkit) is a little-known feature of Visual Studio. It's a code-generation toolkit, and its templates allow us to customize how files are generated using a familiar syntax. T4MVC Out of the box, ASP.NET MVC co

Asp.net mvc 2 in action 笔记-3 Areas AJAX AutoMapper

Areas 第21.22章 分组管理Controller 关键点 在Global.asax.cs增加AreaRegistration.RegisterAllAreas(); 重载AreaRegistration 的RegisterArea函数,定义路由 其他都和普通的Controller一样,每个Area下的目录也包含MVC目录 方便移植的Area:程序逻辑和视图等打包 在一个库文件中,其他我web引用即可使用,提供了例子实现. AJAX 第12.27章 MVC项目默认集成了JQuery库和Mi

Asp.net mvc 2 in action 笔记 -2 View Controller

View 第3.10章 ViewData 和强类型视图          一般情况下,定义presentation model,然后形成强类型视图,可以结合ViewData传递小的片段和简单数据,以增加代码的维护性          presentation model类中可以加入data annotations属性,控制数据的验证 HTML helper类 DisplayFor DisplayTextFor EditorFor CheckBoxFor DropDownListFor Hidde

ASP.NET MVC Web API 学习笔记---联系人增删改查

本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系人          说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟    1.       Web API中包含的方法 Action HTTP method Relative URI GetAllContact GET /api/contact GetContact GET /api/

返璞归真 asp.net mvc (3) - Controller/Action

原文:返璞归真 asp.net mvc (3) - Controller/Action[索引页][源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者:webabcd 介绍 asp.net mvc 之 Controller 和 Action Controller 类必须以字符串 "Controller" 做类名称的结尾,字符串 Controller 之前的字符串为 Controller 的名称,类中的方法名为 Action 的名称 Acti

ASP.NET MVC Web API 学习笔记----HttpClient简介

  1. HttpClient简单介绍  依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage. 问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NET Framework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处: (

为ASP.NET MVC扩展异步Action功能

异步请求处理是ASP.NET 2.0中引入的高级特性,它依托IO Complete Port,对于提高IO密集型应用程 序的吞吐量非常重要(详见原理描述和性能测试).但是目前ASP.NET MVC框架缺少异步Action功能,这 也就是老赵经常挂在嘴边的那个"目前ASP.NET MVC所缺少的非常重要的功能".在TechED 2008 China的 Session中我曾经给出过一个所谓的"解决方案",但是它复杂性之高使那个解决方案有太多限制.为了 弥补TechED上

学习ASP.NET MVC(三) Controller/Action 深入解析与应用实例

一.摘要 一个Url请求经过了Routing处理后会调用Controller的Action方法. 中间的过程是怎样的? Action方 法中返回ActionResult对象后,如何到达View的? 本文将讲解Controller的基本用法, 深入分析 Controller的运行机制, 并且提供了创建所有类型Action的代码. 值得学习ASP.NET MVC时参考. 二.承上启下 在上一篇文章中, 我已经学会了如何使用Routing获取Controller和Action, 随后的程序会调用 Co