本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=98&extra=page%3D1

MVC模式的参数(数据)传递主要涉及到两种类型参数的传递。
1、      将数据从html页面(View层)传递到控制器(Controller层)。
2、         将控制器(Controller层)的数据传递到html页面(View层)。
 
我们写的网站展现给用户的都是HTML页面,通过HTML页面的各种元素与用户进行交互操作。比如用户注册、登录,下面就以用户登录为例,讲解参数的传递。
首先我们创建一个方法LoginPage,LoginForPost,LoginForGet,HomeController代码如下:
public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
return View();
}
public ActionResult FirstMethod()
{
return View();
}
public ActionResult LoginPage()
{
return View();
} [HttpPost]
public ActionResult LoginForPost(string name, string password)
{
//name = Request.Form["name"];
//password = Request.Form["password"];
ViewData["name"] = name;
ViewData["password"] = password;
return View();
}
public ActionResult LoginForGet(string name, string password)
{
ViewBag.name = name;
ViewBag.password = password;
return View();
}
}
增加LoginPage,LoginForPost,LoginForGet对应的页面

LoginPage页面

@{
ViewBag.Title = "LoginPage";
} <h2>用户登录</h2>
<h3>Post方法举例</h3>
<form action="/Home/LoginForPost" method="post">
<input type="text" name="name" />
<input type="password" name="password" />
<input type="submit" value="登录" />
</form>
<h3>Get方法举例</h3>
<form action="/Home/LoginForGet" method="get">
<input type="text" name="name" />
<input type="password" name="password" />
<input type="submit" value="登录" />
</form>

LoginForPost页面代码

@{
ViewBag.Title = "LoginForPost";
String name = ViewData["name"] as String;
String password = ViewData["password"] as String;
} <h2>你输入的name为@(name) password为@(password)</h2>

LoginForGet页面代码

@{
ViewBag.Title = "LoginForGet";
} <h2><h2>你输入的name为@(ViewBag.name) password为@(ViewBag.password)</h2></h2>

运行程序,输入http://localhost:6187/Home/LoginPage.所得页面如图所示:
 
我们先测试Post方法。输入Nice 和123456。点击登录:

上述Post方法的测试中,我们在html的表单中输入数据,然后传入控制器Home中的LoginForPost方法,观察LoginForPost使用了[HttpPost]属性进行了标记,该属性表示该方法只有POST请求才能访问,传递过来的参数直接作为了方法的参数,参数名称必须和表单中的input元素的name属性对应。当然 你也可以通过下面的代码直接从请求中获取传递的参数。

name = Request.Form["name"];
password = Request.Form["password"];

在从LoginForPost方法中传递到html页面中。在LoginForPost方法中获取到相关的参数后,有通过ViewData对象传递给页面。在页面我们需要进行强制转换。

String name = ViewData["name"] as String;
String password = ViewData["password"] as String;

很简单吧?再看Get方法,Get方法其实和Post方法类似。只是在LoginForGet方法中获取参数后传到到页面我们采用了ViewBag。ViewBag是dynamic类型对象,使用起来更加方便而已。下面在比较一下ViewData和ViewBag的优劣点。

ViewData

ViewBag
它是Key/Value字典集合
它是dynamic类型对像
从Asp.net MVC 1 就有了
ASP.NET MVC3 才有
基于Asp.net 3.5 framework
基于Asp.net 4.0与.net framework
ViewData比ViewBag快
ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型
在ViewPage中查询数据时不需要类型转换
有一些类型转换代码
可读性更好

显然,ViewBag不需要进行类型转换,这样大大减少了我们编写代码是出现的bug。
下一篇将介绍,js主要为jquery与ASP.NET MVC3 方法的交互。

ASP.NET MVC3入门教程之参数(数据)传递的更多相关文章

  1. ASP.NET MVC3入门教程之第一个WEB应用程序

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=91&extra=page%3D1 上一节,我们已经搭建好了AS ...

  2. ASP.NET MVC3入门教程之环境搭建

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=90&extra=page%3D1 什么是ASP.NET MVC ...

  3. CentOS开发ASP.NET Core入门教程

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9891346.html 因为之前一直没怎么玩过CentOS,大多数时间都是使用Win10进行开发,然后程序 ...

  4. ASP.NET CORE 入门教程(附源码)

    ASP.NET CORE 入门教程 第一课 基本概念 基本概念 Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架 符合Web应用特点 .NET Core跨平台解决方案 ...

  5. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

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

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

  7. ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门

    一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...

  8. ASP.NET MVC3 入门指南之数据验证[源码RAR下载]

    http://www.cnblogs.com/BingoLee/archive/2011/12/23/2298822.html 前言: 无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...

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

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

随机推荐

  1. .NET领域驱动设计—看DDD是如何运用设计模式颠覆传统架构

    阅读目录: 1.开篇介绍 2.简单了解缘由(本文的前期事宜) 3.DomainModel扩展性(运用设计模式设计模型变化点) 3.1.模型扩展性 3.2.设计模式的使用(苦心专研的设计模式.设计思想可 ...

  2. SQL动态列查询

    数据库中为了实现表格数据的自由设置,我们经常设计纵表,或者列定义的表(如下KeyValue),定义一个列超级多的表中每个字段的意义. 但是在设计时简单的东西却很容易被人们忘记,如下一个简单但是很松散的 ...

  3. 今天说一下 Group by 这个东西

    group by 这个关键字,这个语句太平凡了~基本上只要有报表的地方,就会有它的身影. 常规用法就是 INSERT INTO #TypeValue ( TypeID, Col2 ) , N , N ...

  4. Oracle not in子连接查询不到值的问题(not in 不能查询null数据)

    前几天在项目中,做数据导入时,发现not in和in 查出来的条数不互补.ATABLE2明明中有些记录在ATABLE3中不存在,但是not in时查不出记录. CREATE TABLE ATABLE2 ...

  5. EF Power Tools的Reverse Engineer Code First逆向生成Model时处理计算字段

    VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成Model时,没有处理计算字段.在保存实体时会出现错误. 可以通过修改Mapping.tt ...

  6. gdb 定位 oops call trace

    [    1.454380] BUG: unable to handle kernel NULL pointer dereference at 00000000000005d0[    1.47402 ...

  7. MS SQLServer 操作XML语句的存储过程

    -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ...

  8. MMORPG大型游戏设计与开发(客户端架构 part11 of vegine)

    从早年的无声电影到现在的逼真3D大片,人类在科技上可谓是一再突破.不知道有没有人经历过那无声的日子,没有声音的世界,咱们的耳朵也就失去了它本有的用途了.在游戏世界中,声音元素成了必不可少的一部分,一个 ...

  9. leetcode-Combinations 复习复习排列组合

    Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2 ...

  10. codevs 1082 线段树练习3

    1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Description 给你N个数,有两种操作: 1: ...