71muke?v=1
在线看书
立即购买

第一章 ASP.NET MVC介绍

收起
2023-04-08更新,每天更一篇

第二章 视图和控制器的数据交互

收起
2023-04-08更新,每天更一篇

第三章 模型绑定的使用

收起
2023-04-08更新,每天更一篇

第四章 ASP.NET MVC中的表单辅助方法

收起
2023-04-08更新,每天更一篇

第五章 ASP.NET MVC的表单验证

收起
2023-04-08更新,每天更一篇

第六章 ASP.NET中的强类型

收起
2023-04-08更新,每天更一篇

第七章 ASP.NET MVC中使用Ajax

收起
2023-04-08更新,每天更一篇

第八章 在ASP.NET MVC中WebAPI的使用

收起
2023-04-08更新,每天更一篇

第九章 控制器和路由的使用

收起
2023-04-08更新,每天更一篇

第十章 用户管理的实战开发

收起
2023-04-08更新,每天更一篇

后端如何接收表单数据

上一章介绍了控制器和视图数据的交互操作。这一节课我们深入讲解前端传输数据时,对复杂的数据进行深入的绑定操作。


没有模型绑定前

为了方便大家更深入的理解模型绑定, 我们先来看看使用Request方法接收参数。


创建一个UserController.cs控制器,代码如下:

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

namespace FirstProject.Controllers
{
    public class UserController : Controller
    {
        // GET: User
        public ActionResult Index()
        {
            return View();
        }

        //添加用户信息的功能
        [HttpPost]
        public ActionResult Create()
        {
            //因为是post方法请求过来的,所以使用post方法接收
            string username = Request.Form["username"]; //Request.Form 方法只能接收post数据,不能接收get数据
            string pwd = Request["pwd"]; //这样写,post和get数据都可以获取
            string id = Request.QueryString["id"];//注意,这样写只能取到路径的参数,取不到post表单中的值
            string age = Request.Form["age"];
            string name = Request.Form["name"];
            return Content(username + "-" + pwd + "-" + id + "-" + age + "-" + name);
        }
    }
}


对应控制器方法的视图Index.cshtml,代码如下:

@{
    ViewBag.Title = "Index";
}

<h2>添加用户</h2>

<form action="/User/Create?id=1000" method="post">
    <p>
        用户名: <input type="text" name="username" value="" />
    </p>
    <p>
        密码: <input type="password" name="pwd" value="" />
    </p>
    <p>
        名字: <input type="text" name="name" value="" />
    </p>
    <p>
        年龄: <input type="text" name="age" value="" />
    </p>
    <input type="submit" value="保存" />
</form>


运行后的效果:


image.png


点击提交得到如下结果:


image.png

通过上面的案例,会发现使用Request接收参数特别麻烦,写的代码特别多,这样实现功能特别繁琐,有什么办法可以优化呢?可以使用模型绑定解决这个问题!接下来我们正式学习模型绑定!


模型绑定

将浏览器发送的HTTP请求数据转换为.NET对象的过程。

模型绑定使得在控制器中可以直接获取视图、或URL传递来的数据,且这些数据可以自动转换为模型对象,以便调用。

模型绑定机制省略了常见的Request.Form和Request.QueryString手动传值和类型转换的步骤,这样可以专注地处理模型对象。


使用示例,我们对前面的代码完善如下:

Index.cshtml代码:

@{
    ViewBag.Title = "Index";
}

<h2>添加用户</h2>

<form action="/User/Create?id=1000" method="post">
    <p>
        用户名: <input type="text" name="username" value="" />
    </p>
    <p>
        密码: <input type="password" name="pwd" value="" />
    </p>
    <p>
        名字: <input type="text" name="name" value="" />
    </p>
    <p>
        年龄: <input type="text" name="age" value="" />
    </p>
    <input type="submit" value="保存" />
</form>


UserController.cs代码如下:

//添加用户信息的功能
[HttpPost]
public ActionResult Create(string username,string pwd,int id,int age,string name)
{
    return Content(username + "-" + pwd + "-" + id + "-" + age + "-" + name);
}


运行后效果一致,在这里不做赘述。具体的代码区别大家会发现这样写是不是简单多了,通过方法名接收请求过来的参数,自动赋值特别简单易用是吧!


隐式模型绑定

以上模型绑定也称为“隐式模型绑定”,由默认模型绑定器DefaultModelBinder类自动实现。

DefaultModelBinder类通过4种途径获取绑定的值,其顺序如下:

  1. Request.Form:获取表单提交的值

  2. RouteData.Values:获取路由的值

  3. Request.QueryString:获取URL的值

  4. Request.Files:获取上传文件


1、修改后的控制器包含两个版本的Index操作方法,无参数的Index方法支持浏览(HTTP GET),带参数的Index方法支持提交(HTTP POST),所以加上[HttpPost]特性。

2、默认的模型绑定需要遵守相关约定。在视图中,表单控件的name属性和模型对象属性的名称必须相同,否则无法完成绑定


学习完本节课,做一下作业吧~

作业:使用模型绑定的方式,接收注册传送过来的数据。

留言

发布留言

需要购买本课才能留言哦~

{{ item.createtime | dateStr }}