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数据方法的更多相关文章

  1. jquery通过ajax方法获取json数据不执行success

    1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...

  2. jquery通过ajax方法获取json数据不执行success回调

    问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...

  3. ASP.NET在MVC控制器中获取Form表单值的方法

    在网站开发中我们经常需要用到表单,那么,在前台页面的表单中提交到后台控制器后,后台控制器如何接收表单提交过来的数据呢?下面我们介绍几种常用的方法. 我们先看看前台页面,这里我们用一个用户名和密码的表单 ...

  4. spring mvc 注解访问控制器以及接收form数据的方式,包括直接接收日期类型及对象的方法

    Spring 中配置扫描器 <!-- springmvc的扫描器--> <context:component-scan base-package="com.beifeng. ...

  5. django中使用POST方法 获取POST数据

    在django中获取post数据,首先要规定post发送的数据类型是什么. 1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送PO ...

  6. java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)

    1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...

  7. iOS 详解NSXMLParser方法解析XML数据方法

    前一篇文章已经介绍了如何通过URL从网络上获取xml数据.下面介绍如何将获取到的数据进行解析. 下面先看看xml的数据格式吧! <?xml version="1.0" enc ...

  8. 【转】Django中使用POST方法获取POST数据

    1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送POST数据前,定义post请求头中的请求数据类型: xmlhttp.setRe ...

  9. jquery之getJSON方法获取中文数据乱码解决方法

    最近公司做的东西要用到js,感觉js太繁琐,所以自己学起了jquery,发现jquery确实强大.在学到jquery ajax的时候(用的工具是eclipse),发现$.getJSON()方法请求服务 ...

随机推荐

  1. 半年收入超2亿RMB 独立游戏开发者的艰苦创业路

    一款叫做<监狱建筑师>的模拟经营游戏,目前在Steam平台获得了3000万美元(近2亿元)以上的收入.这款游戏由英国独立工作室Introversion Software发布,而团队最困难的 ...

  2. max number of clients reached Redis测试环境报错

    现象:测试服务是去redis循环取数据,早上发现服务挂了,手动登陆redis 无法输入命令,报错:max number of clients reached Redis

  3. Linux 学习记录 20170218

    一.Linux 硬件查看命令     ----/proc 文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制.我们可以从这个文件里获取到系统的相关信息. 1.显卡信息dmesg ...

  4. 第五周作业总结(内含用Junit测试ArrayStack和LinkedStack课堂练习报告)

    ---恢复内容开始--- 学号 20162310<程序设计与数据结构>第五周学习总结 教材学习内容总结 集合分为线性集合(集合中的元素排成一行)和非线性集合(按不同于一行的方式来组织元素, ...

  5. 冲刺One之站立会议2

    在确定了总体目标之后,我们先决定了实现的具体功能,包括一个登陆界面,一个聊天室的主界面和服务器端的内容.我们今天完成了一小部分内容,把每个内容的主体框架搭建了起来. 效果如下图所示: 燃尽图2

  6. Maven教程--02设置Maven本地仓库|查看Maven中央仓库

    一:设置Maven本地仓库 Maven默认仓库的路径:~\.m2\repository,~表示我的个人文档:例如:C:\Users\Edward\.m2\repository:如下图: Maven的配 ...

  7. mysql非安装包安装教程

    设置mysql的环境变量 本人设置安装的路径是:E:\WebApplication\webMySQL\mysql-5.7.13-winx64 我的电脑 ---> 高级系统配置 ---> 环 ...

  8. mongo导入导出命令

    1.导出工具:mongoexport     1.概念:         mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指 ...

  9. 30_数据库_第30天java_jdbc_(DBUtils)_讲义

    今日内容介绍 1.DBUtils 2.连接池 01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操 ...

  10. mybati内sql查询语句在两个日期内

    装载自: http://blog.csdn.net/u010442302/article/details/72902441?locationNum=9&fps=1   <select i ...