C# MVC4.0(6)---请求中取出参数

本文介绍了在C# MVC4.0中如何从GET/POST请求中获取参数,包括Request对象的使用,如QueryString、Form、Params属性。同时,详细讲解了不同方式传递参数的优缺点,如ViewData、ViewBag、PartialView、TempData和ViewModel,强调了GET和POST的安全性差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何从get/post请求中取出参数

1,首先了解POST和GET的区别吧。老生常谈

      A,get主要是用来像服务器发送请求,获取数据!,POST是向数据库提交数据

      B,GET传送的数据量别POST的小。

      C,GET的数据是存放在URL上面的,不安全。POST是存放在HTML的  HEADer上面

      D,在C#中获取get的数据的方法是request.querrystring();POST是request.Form();

2,传参数:我把它定义为:A,前台传后台;B,后台传前台;

A,前台传后台

提交:

    1,form表单

     2,URL中带参数

     3,JS中异步请求

接收: 

Request.QueryString[""]  只能接收GET

Request.Form[""]  只能接收POST

Request.Params[""]   get  post  都可以的

Request.Params.GetValues("txt_votes"); 取到某name值,以数组形式。

mvc形式传递过来的参数

直接在Control中添加参数,只要参数名和name的名字相同就OK了

/// <summary>
        /// 管理员登陆
        /// </summary>
        /// <param name="AdminName"></param>
        /// <param name="Passsword"></param>
        /// <returns></returns>
        public ActionResult Login(String user, String pw)
        {
            MD5 md5 = new MD5();
            String password = md5.getMd5(pw, 32);
            TAdmin Admin = dao.Login(user, password);
            if (Admin != null)
            {
                Session["Admin"] = Admin;
                Session.Timeout = 60;
                ViewBag.Session = Session["Admin"];
                return RedirectToAction("LoginSuccess");
            }
            else {
                return RedirectToAction("Login", "UserInfo");
            }
                     
        }



C,后台传前台:

一般的话直接调用ASPX的方法和变量都可以

MVC:

ViewDate:

ViewBag:

ViewModule:

ViewData是在ControllerBase中类型为ViewDataDictionary的属性,以键值对的方式存储,通过key来获取值。

 

主要用途:
ViewData和ViewBag的作用是一样的,只不过在早期的ASP.NET MVC版本(1和2)中,使用的是ViewData,后期的版本推出了ViewBag,它比ViewData有更多的优点,推荐使用ViewBag。

 

优点:
● 方便:以键值对的方式把Model存放起来,再从控制器传递到视图。

 

缺点:
● 单向传递:只能从控制器传递到视图。
● 只能存放当前请求下的Model:无法维持在多个请求下的Model,一旦页面跳转,ViewData的值就变成了null
● 只能存放"小数据":如果要传递"大数据",不推荐使用ViewData。
● 使用key获取的方式,可读性不如ViewBag。
● 没有智能提示
● 没有编译期错误检查

 

  使用ViewBag

4


ViewData是在ControllerBase中类型为dynamic的属性,是name/value形式的字典。dynamic类型是C# 4.0推出的一个类型,它使得在编译期不需要指明类型。

 

主要用途:
● 以name/value的形式把Model存放起来,再从控制器传递到视图。视图的Title就是通过ViewBag.Title来设置的。


优点:
● 方便
● 使用name获取对应的值,比ViewData使用key获取对应的值,来得更好。
● 不需要显式指明类型

 

缺点:
● 单向传递:只能从控制器传递到视图。
● 只能存放当前请求下的Model:无法维持在多个请求下的Model,一旦页面跳转,ViewBag的值就变成了null
● 只能存放"小数据":如果要传递"大数据",不推荐使用ViewBag。
● 没有智能提示
● 没有编译期错误检查

 

  使用PartialView

主要用途:
对于哪些需要重复使用的视图部分,提取出来作为部分视图。

 

优点:
● 方便重复使用
● 只更新主视图的某个部分

 

缺点:
● 多过的使用影响可读性

 

  使用TempData

5


TempData在ControllerBase中类型为TempDataDictionary的属性,是键值对形式的字典,通过key来获取对应的值,在赋值的时候需要显式指明类型。和ViewData和ViewBag的不同之处在于:它可以跨controller,跨action来使用,其内部使用了Session机制。

 

主要用途:
可以用来传递一些非敏感类的数据,比如验证、错误信息等。

 

优点:
● 跨controller,跨action

 

缺点:
● 需要显式赋值,并需要判断是否为null以避免错误
● 没有智能提示

 

  使用ViewModel

它是基于视图需求的Model,它可以把多个View Model以属性的方式合并到一个View Model中。

 

优点:
● 把多个model放到一个View Model中
● 有智能提示
安全性:Domain Model被隐藏
● 当Domain Model有变化,不需要修改视图很多,只需要修改对应的View Model就可以
● 在Domain Model和View之间实现了松耦合


(GET的数据是存放在URL上面的,不安全。POST是存放在HTML的  HEADer上面)现在用FIDDLER来验证一下:

FORM表单源代码:

<form id="myLoginForm" action="/Admin/Login" method="get" class="validate">
            <div class="login">
                <div class="email">
                    <label for="user">用  户  名</label>
                    <div class="email-input">
                        <div class="control-group">
                            <div class="input-prepend">
                                <span class="add-on"><i class="icon-user"></i></span>
                                <input type="text" id="user" name="user" class="{required:true}" >
                            </div>
                        </div>
                    </div>
                </div>
                <div class="pw">
                    <label for="pw">密       码</label><div class="pw-input">
                        <div class="control-group">
                            <div class="input-prepend">
                                <span class="add-on"><i class="icon-lock"></i></span>
                                <input type="password" id="pw" name="pw" class='{required:true}'>
                            </div>
                        </div>
                    </div>
                </div>
                <span id="errorac1" style="display:none;color:red;text-align:right;">用户名不存在,请重新输入!</span>
                <span id="errorpwd" style="display:none;color:red; text-align:right;">你的密码不正确!</span>
                <div class="remember">
                    <label class="checkbox">
                        <input type="checkbox" value="1" name="remember"> 记住密码
                    </label>
                </div>
            </div>

            <div class="submit">
                <button class="btn btn-red5" id="button" type="button" onclick="checkLoginPassword(document.getElementById('user').value,document.getElementById('pw').value);">登陆</button>
                <button id="submit" type="submit" style="display:none"></button>
            </div>
        </form>

GET抓包情况:


</pre><pre name="code" class="javascript">查看POST的抓包情况:、
<img src="https://img-blog.youkuaiyun.com/20141125090830450?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1YW5nZXJf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.youkuaiyun.com/20141125090220339?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1YW5nZXJf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值