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. Python List Comprehension

    (一)使用List Comprehension的好处 在了解Python的List Comprehension之前,我们习惯使用for循环创建列表,比如下面的例子: numbers = range(1 ...

  2. Linux基础入门--06

    简单的文本处理 实验介绍 这一节我们将介绍这几个命令:tr.col.join.paste 1.tr: -d:删除和set1匹配的字符,不是全词匹配也不是按字符顺序匹配 -s:除去指定的连续并重复的字符 ...

  3. beat冲刺(3/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(3/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  4. 信息安全C散列函数的应用及其安全性2016011992

    1:散列函数的具体应用 使用一个散列函数可以很直观的检测出数据在传输时发生的错误. MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验(Checks ...

  5. 404 Note Found 团队会议纪要

    目录 团队会议 会议纪要1 会议纪要2 会议纪要3 会议纪要4 会议纪要5 会议纪要6 团队会议 会议纪要1 会议纪要2 会议纪要3 会议纪要4 会议纪要5 会议纪要6

  6. #Leetcode# 692. Top K Frequent Words

    https://leetcode.com/problems/top-k-frequent-words/ Given a non-empty list of words, return the k mo ...

  7. appium遇到问题总结(不断更新)

    问题1 执行脚本 报错: java.lang.NoSuchMethodError: org.openqa.selenium.remote.ErrorHandler.<init>(Lorg/ ...

  8. js对象进行浅复制,深拷贝的方法

    js对象浅拷贝和深拷贝详解   本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷 ...

  9. windows 下查看进程开始运行的时间

    1. 打开运行 输入 msinfo32 然后在软件环境- 正在运行任务- 就能够看到运行开始的时间了.

  10. JVM学习笔记(一):Java内存区域

    由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 首先Java源代码文件(. ...