1、最原始的表单方式

前端:

<form action="/library/test" method="POST"><input id="Name" name="Name" type="text" value=""><input id="Id" name="Id" type="text" value=""><input type="submit" value="Save" />
</form>

后台:

       [HttpPost]public ActionResult Test(FormCollection fc){            Person person=new Person(){Id = fc["Id"], Name = fc["Name"]};return Json(person.Id+" "+person.Name, JsonRequestBehavior.AllowGet);}

2、使用MVC默认的模型绑定

 [HttpPost]public ActionResult Test(Person person){return Json(person.Id+" "+person.Name, JsonRequestBehavior.AllowGet);}

当前端发送数据后,person已经被填充了

因为在MVC中,Person会默认绑定到后台的参数类型(模型绑定器会去去在请求的各种数据中查找对应的上的字段,若找到,则相应的数据到参数person里面)

3、自定义modelbinder绑定

首先,需要一个实现了IModelBinder接口的类,这个类的作用是依据需求,自定义从请求的各种数据(包括表单、URL Query String字)中去查找要填充的值。这些请求数据位于IValueProvider中

    public class PersonModelBinder : IModelBinder{public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext){IValueProvider provider = bindingContext.ValueProvider;return new Person{Id = provider.GetValue("Name").AttemptedValue,   //本例中将位于valueProvider请求的数据中key为Name的值赋给IdName = provider.GetValue("Id").AttemptedValue};}}

然后创建一个特性类,该类实现了CustomModelBinderAttribute

    public class PersonBinderAttribute : CustomModelBinderAttribute{public override IModelBinder GetBinder(){return new PersonModelBinder();}}

最后,使用时,在Person参数前,加上刚刚自定义的特性[PersonBinder]

       [HttpPost]public ActionResult Test([PersonBinder]Person person){// AddIntoDb(person);return Json(person.Id+" "+person.Name, JsonRequestBehavior.AllowGet);}

效果:

这样的绑定效果,甚至直接通过访问http://localhost:11169/library/test?name=Benjamin&id=11223,后台的person也能被填充。

原因是模型绑定器通过valueprovider查找了Url QueryString中相匹配的参数。

4、通过手动序列化和反序列化

前端:

<script type="text/javascript">$(function () {var person = new Object();person.Id = "112233";person.Name = "Benjamin";var personStr=JSON.stringify(person);   //使用json2.js的序列化方法$.ajax({url: window.UrlContent("/Library/Test?tick=" + Math.random()),data: { personStr: personStr },type: "POST",success: function (result) {}});});
</script>

后台使用Newtonsoft.Json dll 的方法反序列化

 public ActionResult Test(string personStr){Person person=JsonConvert.DeserializeObject<Person>(personStr);return Json(person.Id+" "+person.Name, JsonRequestBehavior.AllowGet);}

这种方法的优点是,在前端装配数据时自由度比较大,数据来源不需要仅从表单元素中获取。

转载于:https://www.cnblogs.com/Benjamin/p/3414449.html

前端传值给后台的若干种方式相关推荐

  1. ssm框架从前端传值到后台出现乱码的解决办法,你遇到的可能就是这几种

    今天遇到的乱码问题让我找了很多地方,现在大致整理一下, 1.Tomcat服务器配置的问题(我今天遇到的就是这个原因),这个是从前端传值到后台乱码,从后台插入到服务器也乱码. 方法:找到Tomcat的安 ...

  2. web服务器与网页表单通信,前端与后端通信的几种方式

    只有知道了历史,才能更好的把握现在和未来. 在项目中,通常前端开发主要完成两件事情,一是界面搭建,一是数据交互. 下面是我总结前端与后端交互的几种方式,本文只作简单介绍,不做深入了解. 一.AJAX ...

  3. 实现前端页面跳转的几种方式

    实现前端页面跳转的几种方式 推荐使用 <script language='javascript'> document.location =   'http://mail.qq.com/do ...

  4. Vue组件之间传值/调用方法的几种方式

    组件之间传值/调用方法的几种方式 (一)父组件向子组件传值==props 1.在父组件中使用子组件的地方绑定数据 <children :message="message"&g ...

  5. 前端实现跨域的三种方式

    前端解决跨域的三种方式: 1.cors跨域(只需要后端配置) header("Access-Control-Allow-Origin:*"); // 允许任何来源 header(& ...

  6. 前端页面性能优化的几种方式

    前端页面性能优化的几种方式 提升页面性能优化的常见方式: 资源压缩合并,减少http请求 非核心代码异步加载 --> 异步加载的方式 --> 异步加载的区别 利用浏览器缓存 --> ...

  7. 前端跨域通信的几种方式

    前言 前端通信类的问题,主要包括以下内容: 1.什么是同源策略及限制 同源策略是一个概念,就一句话.有什么限制,就三句话.能说出来即可. 2.前后端如何通信 如果你不准备,估计也就只能说出ajax. ...

  8. jquery读取json文件跨域_跨域方法的若干种方式

    一.跨域的解释 那什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制, a.com 域名下的js无法操作 b.com 或是 c.a.com 域名下的对象.当协议.子域名.主域名.端口号 ...

  9. 实施前端微服务化的六七种方式

    微前端架构是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用. 由此带来的变化是,这些前端应用可以独立运行.独立开发.独立 ...

最新文章

  1. JavaScript 小记 之 闭包(Closures)
  2. java ArrayList 清空元素时迭代器造成的错误
  3. hibernate添加spring 事务管理注意问题记录
  4. redis rdb aof区别_Redis 持久化之 RDB 与 AOF 详解
  5. python基本命令range_Python的Range()函数(指南)
  6. jQuery插件Label Effect制作个性化的文字特效
  7. 递归实现将十进制转化为二进制
  8. 梦记录:1204(梦到观世音菩萨像)
  9. java性能优化权威指南_《Java性能优化权威指南》PDF 下载
  10. winrar分卷压缩_无广告的WinRAR解压软件
  11. 干货!10分钟,用Python生成图文并茂的PDF报告!
  12. 利用SSA方法插值GRACE数据的空缺数据
  13. Cannot halt the core解决方法
  14. 微信小程序(五)新版的用户授权和判断是否是否已经授权和自动提示更新版本
  15. 计算机科学报数学竞赛,五大学科竞赛参加哪一个科目?五大学科竞赛赛程设置分析!...
  16. python模拟勒索病毒
  17. linux 下安装rar解压软件,centos下rar解压工具的安装 rar和unrar命令使用方法
  18. 贝塞尔曲线 弯曲动画ios_用贝塞尔曲线弯曲
  19. 使用python操作qq邮箱发送邮件
  20. 习惯七 不断更新---平衡的自我提升原则

热门文章

  1. C# WinForm开发系列 - DataGrid
  2. iOS 新窗口在最上层
  3. Android模拟自定义浏览器和打开另一个Ativity(06)
  4. Linux-gate.so.1的含义[ZZ]
  5. 黄聪:主目录安装Wordpress,根目录安装Discus,httpd.ini如何写?
  6. 边缘计算 — 业务的需求特征
  7. 4G EPS 的网络协议栈
  8. Openstack组建部署 — Environment of Controller Node
  9. 运放电路复习,放大器、加法器、积分器、差分放大电路等
  10. DRV8711的使用,堵转stall检测的使用及衰减模式