本文转载自: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. Mongodb Manual阅读笔记:CH7 索引

    7索引 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔记 ...

  2. 按要求编写Java应用程序。 (1)建立一个名叫Cat的类: 属性:姓名、毛色、年龄 行为:显示姓名、喊叫 (2)编写主类: 创建一个对象猫,姓名为“妮妮”,毛色为“灰色”,年龄为2岁,在屏幕上输 出该对象的毛色和年龄,让该对象调用显示姓名和喊叫两个方法。

    package zuoye; public class Cat { String name="妮妮"; String color="灰色"; int age=1 ...

  3. shell流程控制&函数

    条件 if-then-elif-then-fi if的条件部分经常使用test EXPRESSION或[ EXPRESSION ]实现,test的用法可以参见test if 条件1 #if 条件1;t ...

  4. android中BuildConfig.DEBUG的使用

    ADT(r17)中添加了一个新功能可以允许开发者只在Debug模式下允许某些代码.Build系统生成一个名称为BuildConfig的类,该类包含一个DEBUG 常量,该常量会根据您的Build类型自 ...

  5. TCP的关闭,到底是几次握手,每次的标志位到底是什么!

    做题的时候遇到一个问题,TCP关闭的时候到底是三次还是四次握手,如果是三次,少了哪部分?   按照 <计算机网络> -第五版-谢希仁       然而对于TCP关闭, 有的地方能找到   ...

  6. mysql 将列值转变为列的方法(转)

    转自http://www.jb51.net/article/36497.htm -- 创建库CREATE TABLE `rate` ( `uname` VARCHAR (300), `object` ...

  7. [转]com.devicepush.cordova-phonegap Device Push Notification Plugin

    本文转自:https://www.npmjs.com/package/com.devicepush.cordova-phonegap Device Push Notification Plugin D ...

  8. 【温故而知新-Javascript】使用 Ajax(续)

    1. 准备向服务器发送数据 Ajax 最常见的一大用途是向服务器发送数据.最典型的情况是从 客户端发送表单数据,即用户在form元素所含的各个 input 元素里输入的值.下面代码展示了一张简单的表单 ...

  9. 树网的核[树 floyd]

    描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T ...

  10. FiveChess笔记

    //为0,表示该位置没有棋子:1表示该位置下过黑子:2白子 int[][] allChess = new int[19][19];//同时还通过下标记录了棋子的相对位置 1.对话框: 确认对话框(0是 ...