MVC中几种常用传参方式以及在后台中获取客户端请求参数值

传参方式:
1.路由传参:
格式:/ControllerName/ActionName/Parameter1/Parameter2 …
注意:必须要先配置对应的路由规则

例如:现在用理由传参的方式,传递两个参数

1-1:先在App_Start文件下的RouteConfig.cs路由配置文件中,配置路由规则
添加一个新的路由规则:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVC_Project02
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "User", action = "Login", id = UrlParameter.Optional }
            );

            //配置路由传参规则
            routes.MapRoute(
               name: "Login",//唯一
               url: "{controller}/{action}/{username}/{password}",
               defaults: new { controller = "User", action = "CheckLogin", username = UrlParameter.Optional,password=UrlParameter.Optional }
           );

        }
    }
}

在Login.cshtml视图文件中,添加路由传参的方式:

@*
路由传参:
使用前提:需要根据传递的参数的形式,先在RouteConfig.cs文件中,配置对应格式的路由规则
*@

<a href="/User/CheckLogin/Lara/lara894656" target="_blank">首页</a><br />

通过a标签的href属性可以看出,是调用User控制器下的CheckLogin动作方法,并传递两个路由参数,

那么又该如何在后头的Controller中的Action动作方法中获取那?
方式一:
Controller类的RouteData属性返回一个RouteData 的web类,可以RouteData类中的Values属性获取所有传递过来的路由参数的字典集合(RouteValueDictionary字典集合对象)

/*
获取以路由方式传递来的参数值
1.参数映射
2.使用 RouteData获取
*/
string username2 = RouteData.Values["username"].ToString();
string password2 = RouteData.Values["password"].ToString();

路由规则配置了路由参数名称,传递的时候,按顺序传递,底层会以key/value形式存储在字典集合中,获取时根据key获取对应的value。

第二种方法: 参数映射
在动作方法上,定义参数接收,参数名最好和配置的路由的参数名称一致
Demo:
路由:

routes.MapRoute(
name: "Pagination",
url: "{controller}/{action}/{pageSize}/{pageIndex}"
);
public ActionResult Index(int pageSize,int pageIndex)
{
	.......................................
	......................................
}

2.URL传参
格式:/ControllerName/ActionName?ParameterName1=ParameterValue1
&&ParameterName2=ParameterValue2…

在Login.cshtml视图文件中,添加URL传参的方式:

@*
url传参:使用"?""&&"拼接参数

*@
<a href="/User/CheckLogin?username=jane&&password=jiao7060158" target="_blank">首页</a><br />

在后台获取参数:

方式1:参数映射
形参名称和request请求参数名称一致,
则会将参数值注入到Action方法对应的形参
适合参数较少的情况

分析:
如果把路由的片段变量名作为动作方法的参数名,MVC框架会把路由系统获得的片段变量的值传递给动作方法的形参

片段变量名:配置的路由规则中的路由参数名称({action}/后面的参数)

 public ActionResult CheckLogin(string username, string password)
{
........................................
}

在这里插入图片描述
方式二:对象参数映射
根据传递的参数,创建对应的实体类,属性(不区分大小写)—>参数
会将数据写入到对象中

 public ActionResult CheckLogin(UserModel userModel)
{
	.........................
}

在这里插入图片描述

方式三:直接使用Request对象获取url请求参数
Controller中的Request属性,返回的是一个HttpRequestBase类,是一个HTTP请求的基类,使用其Item[String]此属性可获取

string username2 = Request["username"];//支持get和post请求方式
string password2 = Request["password"];

在这里插入图片描述
URL请求参数,发送请求时,参数是会以key=value的形式存储到请求头中,然后发送到Controller中。

3.表单字段传参
以GET请求方式时,表单提交时,表单字段会以key=value(key为name属性名,value为字段值)的形式附加到url后.

在Login.cshtml视图文件中,添加表单:

<form class="loginform" action="/User/CheckLogin" method="get">
 用户名:<input type="text" name="username" id="username" /> <br />
 密码: <input type="password" name="password" id="password" /><br />
 <input type="submit" value="提交" />
</form>

在后台Controller的Action动作方法中,获取表单数据:
1.支持参数映射(对象映射)
2.使用Request对象获取表单上的指定的字段值(name)

string username2 = Request["username"];//支持get和post请求方式
string password2 = Request["password"];

在这里插入图片描述
3.使用 Request.Form[“name”]获取,但只能获取post请求方式的表单数据

string username = Request.Form["username"];//只能处理post请求
string password = Request.Form["password"];

在这里插入图片描述
改为post请求方式后:成功获取
在这里插入图片描述

具体底层是用了哪些web类,查看微软官方的API文档: web api

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值