前端传值给后台的若干种方式
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
前端传值给后台的若干种方式相关推荐
- ssm框架从前端传值到后台出现乱码的解决办法,你遇到的可能就是这几种
今天遇到的乱码问题让我找了很多地方,现在大致整理一下, 1.Tomcat服务器配置的问题(我今天遇到的就是这个原因),这个是从前端传值到后台乱码,从后台插入到服务器也乱码. 方法:找到Tomcat的安 ...
- web服务器与网页表单通信,前端与后端通信的几种方式
只有知道了历史,才能更好的把握现在和未来. 在项目中,通常前端开发主要完成两件事情,一是界面搭建,一是数据交互. 下面是我总结前端与后端交互的几种方式,本文只作简单介绍,不做深入了解. 一.AJAX ...
- 实现前端页面跳转的几种方式
实现前端页面跳转的几种方式 推荐使用 <script language='javascript'> document.location = 'http://mail.qq.com/do ...
- Vue组件之间传值/调用方法的几种方式
组件之间传值/调用方法的几种方式 (一)父组件向子组件传值==props 1.在父组件中使用子组件的地方绑定数据 <children :message="message"&g ...
- 前端实现跨域的三种方式
前端解决跨域的三种方式: 1.cors跨域(只需要后端配置) header("Access-Control-Allow-Origin:*"); // 允许任何来源 header(& ...
- 前端页面性能优化的几种方式
前端页面性能优化的几种方式 提升页面性能优化的常见方式: 资源压缩合并,减少http请求 非核心代码异步加载 --> 异步加载的方式 --> 异步加载的区别 利用浏览器缓存 --> ...
- 前端跨域通信的几种方式
前言 前端通信类的问题,主要包括以下内容: 1.什么是同源策略及限制 同源策略是一个概念,就一句话.有什么限制,就三句话.能说出来即可. 2.前后端如何通信 如果你不准备,估计也就只能说出ajax. ...
- jquery读取json文件跨域_跨域方法的若干种方式
一.跨域的解释 那什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制, a.com 域名下的js无法操作 b.com 或是 c.a.com 域名下的对象.当协议.子域名.主域名.端口号 ...
- 实施前端微服务化的六七种方式
微前端架构是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用. 由此带来的变化是,这些前端应用可以独立运行.独立开发.独立 ...
最新文章
- JavaScript 小记 之 闭包(Closures)
- java ArrayList 清空元素时迭代器造成的错误
- hibernate添加spring 事务管理注意问题记录
- redis rdb aof区别_Redis 持久化之 RDB 与 AOF 详解
- python基本命令range_Python的Range()函数(指南)
- jQuery插件Label Effect制作个性化的文字特效
- 递归实现将十进制转化为二进制
- 梦记录:1204(梦到观世音菩萨像)
- java性能优化权威指南_《Java性能优化权威指南》PDF 下载
- winrar分卷压缩_无广告的WinRAR解压软件
- 干货!10分钟,用Python生成图文并茂的PDF报告!
- 利用SSA方法插值GRACE数据的空缺数据
- Cannot halt the core解决方法
- 微信小程序(五)新版的用户授权和判断是否是否已经授权和自动提示更新版本
- 计算机科学报数学竞赛,五大学科竞赛参加哪一个科目?五大学科竞赛赛程设置分析!...
- python模拟勒索病毒
- linux 下安装rar解压软件,centos下rar解压工具的安装 rar和unrar命令使用方法
- 贝塞尔曲线 弯曲动画ios_用贝塞尔曲线弯曲
- 使用python操作qq邮箱发送邮件
- 习惯七 不断更新---平衡的自我提升原则
热门文章
- C# WinForm开发系列 - DataGrid
- iOS 新窗口在最上层
- Android模拟自定义浏览器和打开另一个Ativity(06)
- Linux-gate.so.1的含义[ZZ]
- 黄聪:主目录安装Wordpress,根目录安装Discus,httpd.ini如何写?
- 边缘计算 — 业务的需求特征
- 4G EPS 的网络协议栈
- Openstack组建部署 — Environment of Controller Node
- 运放电路复习,放大器、加法器、积分器、差分放大电路等
- DRV8711的使用,堵转stall检测的使用及衰减模式