• MVC教程二:从控制器中获取URL的值


    一、从控制器中获取URL的值有三种方式:

    1、使用Request.QueryString[]

    例如:

    string value = Request.QueryString["BookId"].ToString();

     注意:Request.QueryString只能获取URL中以?分割的参数值。

    案例演示:

    action方法代码如下:

    #region 1、通过Request.QueryString的方式获取URL的值
    public ActionResult Index()
    {
           // 获取路由数据
           if (Request.QueryString["BookId"] != null)
          {
                string value = Request.QueryString["BookId"].ToString();
                ViewData["msg"] = value;
           }
           return View();
    } 
    #endregion

    在前端页面添加一个P标签,用来输出BookId的值:

    <p style="color:red;font-weight:bold">1、通过Request.QueryString获取URL的值:@ViewData["msg"]</p>

    运行结果

    URL里面没有BookId参数时的结果:

    URL里面有Bookid参数时的结果:

    注意:URL里面的参数不区分大小写。

    http://localhost:47723/Home/Index?BookId=4546

    http://localhost:47723/Home/Index?BookID=4546

    http://localhost:47723/Home/Index?bookid=4546

    上面的几种URL都可以获取到BooId参数的值(这里只是列举了几种,其他形式的BookId也可以获取到)。

    2、使用RouteData.Values

    例如:

    string paraDatas = string.Format("controller={0} action={1} id={2}", RouteData.Values["controller"].ToString(),
                    RouteData.Values["action"].ToString(), RouteData.Values["id"]);

     注意:RouteData.Values["id"]就是当前字典上的路由数据,通过访问键名的方式得到键值,比如URL模式匹配的字符串是ID,则key的值必须是id。

    案例演示

    action方法代码如下:

    public ActionResult Index()
    {
          // 获取路由数据
          string paraDatas = string.Format("controller={0} action={1} id={2}", RouteData.Values["controller"].ToString(),
                        RouteData.Values["action"].ToString(), RouteData.Values["id"]);
           ViewData["msg"] = paraDatas;
           return View();
    }

    在前端页面添加一个P标签,用来输出URL参数的值:

    <p style="color:blue;font-weight:bold">2、通过RouteData获取URL的值:@ViewData["msg"]</p>

    运行结果:

    3、使用action参数

    public ActionResult Index(string controller, string action, int id)
    { }

     注意:Action方法的参数和路由字典的参数是对应的,MVC框架在执行action方法前会首先为这些参数赋值。

    案例演示

    action方法代码如下:

    public ActionResult Index(string controller, string action, int id)
    {
          // 获取路由数据
          string paraDatas = string.Format("controller={0} action={1} id={2}", controller, action, id);
          ViewData["msg"] = paraDatas;
          return View();
    }

     注意:这时候需要修改路由注册,给id一个默认值,或者和第一种方式里面一样先判断id的值是否为null。否则会报下面的错误:

    在这里给id一个默认值2

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace MVCUrlPara
    {
        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 = "Home", action = "Index", id = 2 } //给id默认值2
                );
            }
        }
    }

    运行结果

    示例代码下载地址:https://pan.baidu.com/s/1KZE4gcdTBWmMcZMYwhiBvg

  • 相关阅读:
    VS Code中编写C
    Latex
    JAVA学习-----容器和数据结构
    Markdown2最最基本操作说明(未完待续)
    [lua] table.sort(_table, comp)使用要点
    [coco2d]pageView:addPage时,page无法对齐
    [cocos2d]修改富文本文本和高度
    [cocos2d]格式化获取当前layer的控件名
    [c++]牛客刷题记录2.18
    [c++]STL学习
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/8849895.html
Copyright © 2020-2023  润新知