MVC3控制器方法获取Form数据方法
http://www.cnblogs.com/bianlan/archive/2013/01/12/2857310.html
控制器方法获取View页面传送的数据有多种方法,以Edit方法为例:
1、Form表单请求收集方式
包括Request.Form或者FormCollection。
如下:

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
var album = new Album();
if (ModelState.IsValid)
{
// EntityState.Modified表示这条数据是修改的,已有的,而不是新建的
album.Title=collection["Title"];
album.Title = Request.Form["Title"];
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
return View(album);
}

这样直接获取表单请求的数据,代码会变得冗长乏味。上面只是设置了两个属性,如果有10个或者更多个,写起来太累。而且任何不是字符串类型的属性还需要自己进行类型转换。
注意:Request.Form["Title"],必须在页面的有可编辑标签的name值为”Title”,根据html标签的name值获取该标签的数据。
2、 DefaultModelBinder
通过View页面上的类型对象作为参数传递数据
如Edit页面头部引用:@model MusicStore.Models.Album
Edit方法代码如下:

[HttpPost]
public ActionResult Edit(Album album)
{
if (ModelState.IsValid)
{
// EntityState.Modified表示这条数据是修改的,已有的,而不是新建的
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
return View(album);
}

当操作带有一个参数时,MVC机制就会使用一个模型绑定器来构建这个参数对象。在Album对象的情形中,默认的模型绑定检查Album类,并查找能用于绑定的所有Album属性。因为MVC视图的命名都是非常规范的, 标签的name值和实体类的属性值一样。这样,遵照命名约定,默认的模型绑定器能自动将请求中的值转换和移入到一个Album对象中。如当模型绑定器看到Album有Title属性时,它就在请求中查找名为”Title”的参数,查到就加进来。
3、显示模型绑定
使用UpdataModel和TryUpdataModel方法显式调用模型绑定.如果使用UpdataModel方法,如在模型绑定期间出现错误或者模型无效,则会抛出一个异常。而TryUpdataModel方法则不会抛出异常,它返回的是一个布尔类型的值:true or false,true表示成功。
以TryUpdataModel为例:

[HttpPost]
public ActionResult Edit()
{
var album = new Album();
if (ModelState.IsValid)
{
TryUpdateModel(album);
// EntityState.Modified表示这条数据是修改的,已有的,而不是新建的
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
} else
{
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
return View(album);
}
}

MVC3控制器方法获取Form数据方法的更多相关文章
- jquery通过ajax方法获取json数据不执行success
1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...
- jquery通过ajax方法获取json数据不执行success回调
问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...
- ASP.NET在MVC控制器中获取Form表单值的方法
在网站开发中我们经常需要用到表单,那么,在前台页面的表单中提交到后台控制器后,后台控制器如何接收表单提交过来的数据呢?下面我们介绍几种常用的方法. 我们先看看前台页面,这里我们用一个用户名和密码的表单 ...
- spring mvc 注解访问控制器以及接收form数据的方式,包括直接接收日期类型及对象的方法
Spring 中配置扫描器 <!-- springmvc的扫描器--> <context:component-scan base-package="com.beifeng. ...
- django中使用POST方法 获取POST数据
在django中获取post数据,首先要规定post发送的数据类型是什么. 1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送PO ...
- java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)
1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...
- iOS 详解NSXMLParser方法解析XML数据方法
前一篇文章已经介绍了如何通过URL从网络上获取xml数据.下面介绍如何将获取到的数据进行解析. 下面先看看xml的数据格式吧! <?xml version="1.0" enc ...
- 【转】Django中使用POST方法获取POST数据
1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送POST数据前,定义post请求头中的请求数据类型: xmlhttp.setRe ...
- jquery之getJSON方法获取中文数据乱码解决方法
最近公司做的东西要用到js,感觉js太繁琐,所以自己学起了jquery,发现jquery确实强大.在学到jquery ajax的时候(用的工具是eclipse),发现$.getJSON()方法请求服务 ...
随机推荐
- XSS-DVWA
1.反射型 LOW: 没有过滤,直接键入PAYLOAD 查看源码 这里没有任何过滤,使用htmlspecialchars()过滤 结果不弹窗 MEDIUM: LOW等级的方法不奏效了 观察输出可能是过 ...
- Spring Bean注册解析(二)
在上文Spring Bean注册解析(一)中,我们讲解了Spring在注册Bean之前进行了哪些前期工作,以及Spring是如何存储注册的Bean的,并且详细介绍了Spring是如何解析 ...
- CocoaPods :为iOS程序提供依赖管理的工具(yoowei)
修改于:2016.11.18 2017.1.10 2019.01.31 CocoaPods 源码 : https://github.com/CocoaPods/CocoaPods CocoaPo ...
- “Hello World!”团队第七周召开的第六次会议
博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八 .功能说明书 一.会议时间 2017年12月6日 11:20-12:00 二 ...
- RabbitMQ使用笔记
一.安装 1.下载所需安装包 下载服务端(原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的):http://www.rabbitmq.com/install-windows.htm ...
- Spring框架的补充
1.使用xml文件方式配置bean ——property标签ref属性和ref标签区别 <property name=“bean” ref="myBbean" /> r ...
- 3ds Max学习日记(十)——显示场景资源管理器
之前把max的对象窗口(场景资源管理器)给弄没了,搞了半天都不知道怎么调回来,百度搜索到的结果也不知道都是些啥玩意.不过好在最后还是弄出来了! 一开始是下面这样的,没有场景资源管理器用起来很不 ...
- beta发布简评
第一组:新蜂小组 题目:俄罗斯方块 评论:主体功能已经完成,可以流畅的进行游戏,无论效果或是功能都实现的很好. 第二组:Nice团队 题目:约跑APP(约吧) 评论:作为应用,想法创意很好:功能实现上 ...
- 用vue实现省市县三级联动
我真的没想到这个会困扰到我.最开始以为,不就是直接找个简单的插件就实现了吗,jquery插件找了几个,都没有达到目的. 需求是这样的: 点击input框,弹出一个popup,然后可以滚动选择省,市,县 ...
- [Oracle] 11.2.0.1 的客户端无法连接12.2.0.1 的DB端 28040
最近有一个应用服务器安装上了 11.2.0.1 的oracle DB端 又想当 客户端用来 注册 oracle12.2.0.1的DB端发现不行 但是很奇怪 报的错误竟然是 ora 01017 密码错误 ...