ASP.NET MVC3入门教程之参数(数据)传递

本文转载自: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 方法的交互。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值