asp.net mvc 传参、视图赋值【大全】
发布日期:2021-06-29 17:04:47 浏览次数:2 分类:技术文章

本文共 5227 字,大约阅读时间需要 17 分钟。

 

目录


 

1.路由传参

视图传参代码:

路由传值

控制器代码: 

public ActionResult ChuanZhi_LuYou()        {            /*             * =========【取值方法一(获取路由信息)】=========             * RouteData.Values["id"]             * RouteData.Values["变量"] 获取路由信息             * */            /*             *  ViewData["Request_id"]             *  ViewBag.Request_id (动态类型)             *  向视图传递参数有ViewData["变量"]和ViewBag."变量"两种            * */            ViewBag.RouteData_Values_id = RouteData.Values["id"].ToString();            return View();        }

 视图取参代码:

路由传值

ViewBag.RouteData_Values_id=@ViewBag.RouteData_Values_id

 

2.“问号?”传参

视图传参代码:

  • ?传值
  • 控制器代码: 

    public ActionResult ChuanZhi_WenHao()        {            /*             * =========【取值方法二(获取"?"问号传参)】=========             * Request["id"].ToString();             * Request["变量"]取值方式可以获取get和post两种             * =========【取值方法三(获取"?"问号传参)】=========             * Request.QueryString["id"]             * */            /*             *  ViewData["Request_id"]             *  ViewBag.Request_id (动态类型)             *  向视图传递参数有ViewData["变量"]和ViewBag."变量"两种            * */            ViewData["Request_id"] = Request["id"].ToString();            ViewBag.Request_id = Request["id"].ToString();            ViewData["Request_QueryString_id"] = Request.QueryString["id"];            ViewBag.Request_QueryString_id = Request.QueryString["id"];            return View();        }

    视图取参代码:

    ?传值

    ViewData["Request_id"]=@ViewData["Request_id"]
    ViewBag.Request_id=@ViewBag.Request_id
    ViewData["Request_QueryString_id"]=@ViewData["Request_QueryString_id"]
    ViewBag.Request_QueryString_id=@ViewBag.Request_QueryString_id

     

    3.表单form传参

    视图传参代码:

    form 传值

    用户名:
    密码:

    控制器代码: 

    public ActionResult ChuanZhi_BiaoDan()        {            /*             *  ViewData["Request_id"]             *  ViewBag.Request_id (动态类型)             *  向视图传递参数有ViewData["变量"]和ViewBag."变量"两种            * */            ViewBag.UserName = Request["UserName"].ToString();            ViewBag.UserPassword= Request["UserPassword"].ToString();            return View();        }

    视图取参代码:

    form 传值

    ViewBag.UserName=@ViewBag.UserName
    ViewBag.UserPassword=@ViewBag.UserPassword

     

     

    4.通过route特性路由传参

    #region ==============通过route特性路由传参===============         /*【必须】启用路由特性映射         * MVC5可以通过路由配置文件(App_Start/RouteConfig.cs)增加下面代码         * routes.MapMvcAttributeRoutes();        */        ///         /// 通过route特性路由传参[string]        /// 访问:http://localhost:53676/ChuanZhi/c_string/xiaoming        ///         /// 
    [Route("ChuanZhi/c_string/{name}")] public string ceshi_string(string name) { string status = string.Empty; status = name; return status; } /// /// 通过route特性路由传参[int] 参数不可空 /// 访问:http://localhost:53676/ChuanZhi/c_int/1 /// ///
    [Route("ChuanZhi/c_int/{proid:int}")] public string ceshi_int(int proid) { int sum=proid+proid; return $"{proid}+{proid}={sum}"; } /// /// 通过route特性路由传参[int] 参数可空 /// 访问:http://localhost:53676/ChuanZhi/c_int/1 /// ///
    [Route("ChuanZhi/c_int2/{proid?}")] public string ceshi_int2(int proid=1) { int sum=proid+proid; return $"{proid}+{proid}={sum}"; } #endregion

     

    5.重点FormCollection使用

    概述:

    FormCollection用来在controller中获取页面表单元素的数据。它是表单元素的集合,包括<input type="submit" />元素。

    用法举例:

    以下是使用Razor语法的一个表单:

    @using (Html.BeginForm()){    @Html.TextBox("AAA")    @Html.CheckBox("BBB")    }

    提交到后台ActionResult为:

    [HttpPost]public ActionResult Index(FormCollection form){    string a = form["AAA"];    string b = form["BBB"];    string c = form["submit"];    return View();}

    画重点

    [HttpPost] //只接受Post提交

    [ValidateInput(false)]//取消验证 ,主要是忽略:提交过来的表单携带的HTML代码
    public ActionResult Index(FormCollection form)
    {
        string a = form["AAA"];
        string b = form["BBB"];
        string c = form["submit"];
        return View();
    }

    此时可以得到a="",b="false",c="提交"。要注意的是使用form["AAA"]得到的都是string,需要进行类型转换。

    FormCollection和Request.Form的区别:

    推荐大家使用FormCollection,原因有以下两点:

    1.前者便于单元测试:

    对于Action进行单元测试时,使用FormCollection作为输入参数,比Request.Form简单,书写如下代码即可模拟一个FormCollection:

    var form = new FormCollection();form.Add("fieldName","fieldValue");

    2.前者可支持MVC扩展:

    Asp.net MVC在进行模型绑定时,会将用户输入绑定到FormCollection中,默认情况下,FormCollection中的内容与Request.Form一致,但是当我们自定义ModelBinder时,会影响FormCollection的取值,而Request.Form不会影响。这样如果我们在自定义ModelBinder时依旧使用Request.Form,自定义ModelBinder就毫无用处。

     

    什么是ModelBinding

     

    ASP.NET MVC中,所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应。为了能够正确处理请求,Action的参数(如果有的话),必须在Action执行之前,根据相应的规则,把请求中所包含的数据提取出来并将映射为Action的参数值,这个过程就是ModelBinding。ModelBinding的作用就是为Action提供参数列表。

    ModelBinding的好处

    1. 使代码变得更加简洁

    2. 帮助我们获取HTTP请求中的数据

    3. 帮助我们完成必要的数据类型转换

    详细介绍

    标题:ASP.NET MVC5 ModelBinder

    url:

    转载:FormCollection使用:


     

    视图赋值

    向视图传递参数有ViewData["变量"]和ViewBag."变量"两种。

    例如上面的ViewData["Request_id"]和ViewBag.Request_id,无论是双引号(“”)里的Request_id还是(.)后面的Request_id都是自定义的。最规范的命名方式是根据参数命名。

                /*

                 *  ViewData["Request_id"]
                 *  ViewBag.Request_id (动态类型)
                 *  向视图传递参数有ViewData["变量"]和ViewBag."变量"两种
                * */


    ViewData :字典传值,里面是object,需要类型转换

    ViewBag: dynamic(动态)传值,可以随便属性访问,运行时检测
    以上二者是会覆盖的,以后者为准

    model:适合复杂数据的传递,强类型

    TempData:临时数据,可以跨action后台传递,存在session里面,用一次就清掉
     


     

    转载地址:https://cplvfx.blog.csdn.net/article/details/100926846 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

    上一篇:asp.net mvc特性约束后,ModelState 打印输出错误信息
    下一篇:asp中&not总是变成“¬”

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2024年04月19日 07时13分33秒