I:基础绑定的实现

1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时候,有时候会利用到QueryString去做一些功能如:http://localhost/First/QueryString.aspx?Sort=Desc,在MVC中,它的实现有两种方式:

控制器代码

public class QueryStringController : Controller
{
public ActionResult First()
{
ViewBag.Sort = Request.QueryString["Sort"]; return View();
} public ActionResult Second(string sort)
{
ViewBag.Sort = sort; return View();
} }

视图代码:

@* First.cshtml *@
@{
ViewBag.Title = "使用 QueryString 之一";
} <h2>@ViewBag.Title</h2>
<p>Sort = @ViewBag.Sort</p>
@* Second.cshtml *@
@{
ViewBag.Title = "使用 QueryString 之二";
} <h2>@ViewBag.Title</h2>
<p>Sort = @ViewBag.Sort</p>

对于访问~/QueryString/First?Sort=Desc, ~/QueryString/Second?Sort=Desc的运行结果:

2.原理:

在控制器的操作方法内定义的参数,ASP.NET MVC3会根据Request.Form, Request.QueryString, RequestContext.RouteData.RouteValues去进行绑定.注意:但不会对Cookies的集合去进行绑定.

 
测试结果

控制器代码:

public class BindController : Controller
{
public ActionResult CookieTest(string c1)
{
c1 = string.IsNullOrWhiteSpace(c1) "c1 为空" : "c1 = " + c1; ViewBag.C1 = c1; return View();
} public ActionResult FormTest()
{
return View();
} [HttpPost]
public ActionResult FormTest(string inputText)
{
ViewBag.Msg = inputText; return View();
} }

视图代码:
CookieTest.cshtml

@{
ViewBag.Title = "Cookies Bind Test"; var cookiesCount = Request.Cookies.Count;
} <h2>@ViewBag.Title</h2>
<p>@ViewBag.C1<br />
<br />Request Cookies集合:<br />
@for (int i = 0; i < cookiesCount; i++)
{
var cookie = Request.Cookies[i];
@: @cookie.Name&nbsp;&nbsp;@cookie.Value<br />
}
</p>

FormTest.cshtml

@{
ViewBag.Title = "Form Test";
} <h2>@ViewBag.Title</h2>
<form action="FormTest" method="post">
<input name="inputText" type="text" /><br />
<input type="submit" value="提交" />
</form> @if (ViewBag.Msg != null)
{
<p>你输入了: @ViewBag.Msg</p>
}

II:模型的介绍

1.模型的引入

在前一章中,我们已经了解了绑定的一些基础,在此或许你会有疑问,如果对自定义类型进行绑定的话是否需要写以下的类似语句:
MyEntity的定义:

public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}

错误的操作方法:

public ActionResult Entity_Error(int? Id, string Name)
{
MyEntity entity = new MyEntity()
{
Id = Id ?? -1,
Name = Name
}; ViewBag.Entity = entity; return View();
}

而正确的做法完全可以使用:

public ActionResult Entity_Error(MyEntity entity)
{
ViewBag.Entity = entity; return View();
}

这里不需要担心entity参数的命名.运行结果:

2.Ok,在上面的初步介绍之后,我们已经了解了ASP.NET MVC3的默认绑定了,在此先提示一下,MVC的绑定完全可以自定义实现.当然这个话题我将会放到 [ASP.NET MVC3 进阶经验技巧] 主题中去讲解.

3.Form绑定注意.

其实在<input type=”xx” id=”{id}” name=”{name}” />标签中, ASP.NET MVC3仅仅检测{name}而不会去检测{id}所以,大家都知道在HTML规范当中.一个Document内每一个带{id}的标签都必须约束为唯一.而对于数组/集合的绑定{name}仅需定义为[].xxx或[索引键].xxx即可,这样当你在做到类似下图的应用时这部分的知识对你来说是非常重要的.

4.从MVC的角度去看待Model.

III:源代码下载

亲...有点不好意思.这节的代码演示没那么多...

下载地址

本文已结束,感谢各位观众!

ASP.NET MVC3 系列教程 - 模型的更多相关文章

  1. ASP.NET MVC3 系列教程 - 目录

    ASP.NET MVC3 系列教程 - 目录   I:ASP.NET MVC3 新增的功能 ASP.NET MVC3 系列教程 - Razor视图引擎基础语法ASP.NET MVC3 系列教程 - V ...

  2. ASP.NET MVC3 系列教程 – 新的Layout布局系统

    原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage ...

  3. ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0

    I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本 可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如 然后再确 ...

  4. ASP.NET MVC3 系列教程 - Razor视图引擎基础语法

    http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...

  5. ASP.NET MVC3 系列教程 – Web Pages 1.0

    http://www.cnblogs.com/highend/archive/2011/04/14/aspnet_mvc3_web_pages.html I:Web Pages 1.0中以“_”开头的 ...

  6. 【ASP.NET Identity系列教程(一)】ASP.NET Identity入门

    注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  7. 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity

    注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  8. 【ASP.NET Identity系列教程(三)】Identity高级技术

    注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  9. ASP.NET 5系列教程(七)完结篇-解读代码

    在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]") ...

随机推荐

  1. WQS二分题集

    WQS二分,一种优化一类特殊DP的方法. 很多最优化问题都是形如“一堆物品,取与不取之间有限制.现在规定只取k个,最大/小化总收益”. 这类问题最自然的想法是:设f[i][j]表示前i个取j个的最大收 ...

  2. 2017 Multi-University Training 2 解题报告

    Is Derek lying? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  3. BZOJ 1042:[HAOI2008]硬币购物(容斥原理+DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1042 [题目大意] 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4. 某人去 ...

  4. 【枚举】【并查集】Gym - 101243F - Vitamins

    题意:有n片药,有三种颜色,白色比红色重,红色比蓝色重,给你一些它们之间的重量关系,比如1>3,2=4之类,问你它们的颜色,如果没法判断的输出?. 先并查集把等于号全缩起来,然后按照大于号建图, ...

  5. 【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory

    让你在平面上取一个点,使得其到给定的所有点的距离和最小. 就是“费马点”. 模拟退火……日后学习一下,这是从网上扒的,先存下. #include<iostream> #include< ...

  6. 重拾vue2

    Vue组件 一.组件介绍 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的数据具有作用域,以达到组件的复用 二. ...

  7. ScrewTurn Wiki 详细安装(.net 版本下的免费wiki) 步骤

    首先看下官网: http://www.sunhorizon.info/Default.aspx  1.下载和安装                                            ...

  8. 原生js操作HTML DOM

    先上图 1.一些常用的方法 obj.getElementById() 返回带有指定 ID 的元素. obj.getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表( ...

  9. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.lo ...

  10. 使用moment.js管理时间

    如果在nodejs下 npm install moment 引用模块: var moment = require('moment'); 用法: 当前时间:2015-11-07 18:00:51 mom ...