控制器读取视图表单中的数据的几种方式

上次分享了控制器向视图传递数据的4种方式,今天再来给大家讲讲MVC视图中的数据如何提交到控制器。

我们可以通过以下几种方式提交数据到控制器:

1、通过Request.Form读取表单数据

在 控制器动作方法(Action)中,POST方法提交的表单可以使用Request.Form读取其中的数据:

<html>

<head></head>

<body>

<form>

<input type="text" name="Name" value="代码里"/>

<input type="text" name="Site" value="http://www.daimali.com"/>

<input type="submit" value="提交数据"/>

</form>

</body>

</html>

在控制器的Action中获取数据:

public ActionResult  Create()

{

string Name=Request.Form["Name"].ToString();

string Site = Request.Form["Site"].ToString();

}

如上,我们实现了数据从视图到控制器的传递,但在ASP.NET MVC中,ASP.NET MVC框架已经提供了DefaultModelBinder类,可以简化表单数据的读取,所以通过Request.Form读取表单数据的方法并不是最好的方式。下面我们再来看看第二种。

2. 通过FormCollection读取表单数据

我们可以通过传入的FormCollection集合读取表单数据。

public ActionResult  Create(FormCollection collection)

{

string Name=collection["Name"];

string Site = collection["Site"];

}

3. 通过Model Binder读取表单数据

模型绑定(Model Binder) 是将浏览器请求的数据映射到模型对象的过程。

<html>

<head></head>

<body>

<form>

商品名称:<input type="text" name="Name" value="电脑"/>

单价:<input type="text" name="Price" value="5200"/>

<input type="submit" value="提交数据"/>

</form>

</body>

</html>

在控制器的Action中获取数据:

public ActionResult  Create(Product product)

{

string Name=product.Name;

float Price =product.Price;

}

当 用户提交表单到控制器动作方法中时,将在动作方法中接受一个商品对象作为参数,默认模型绑定会创建商品对象并将HTML表单的字段值赋给该对象属性。

模型绑定支持类型:简单类型,自定义类,数组,集合,字典

我们来看看集合的绑定:

<html>

<head></head>

<body>

<form>

<input type="checkbox" name="source" value="代码里"/>

<input type="checkbox" name="source" value="百度"/>

<input type="checkbox" name="source" value="腾讯"/>

<input type="submit" value="提交数据"/>

</form>

</body>

</html>

视图中包含了一个复选框列表,复选框具有相同的名称,在控制器的Action中获取数据:

public ActionResult  GetCheckBoxList(List<string> source)

{

//多选的值自动转换为字符串集合存储在source集合中,可以通过循环获取单个的值

string message=string.Empty;

foreach(string msg in source)

{

message+=msg;

}

.....

}

绑定复杂类

默认模型绑定能够自动绑定大多数复杂类对象

public class Customer

{

public int ID{get;set;}

public string Name{get;set;}

public Address Address{get;set;}

}

public class Address

{

public string City{get;set;}

public string Country{get;set;}

}

Customer类包含一个返回Address类实例的Address属性

视图表单:

<html>

<head></head>

<body>

<form>

<span>客户信息</span>

名称:<input type="text" name="Name" value="代码里"/>

<span>客户地址:</span>

城市:<input type="text" name="Address.City" value="上海"/>

国家:<input type="text" name="Address.Country" value="中国"/>

<input type="submit" value="提交数据"/>

</form>

</body>

</html>

注意:地址表单中都有Address前缀声明

public ActionResult  Create(Customer customer)

{

string name=customer.Name;

string city=customer.Address.City;

string Country=customer.Address.Country;

}

视图中包含创建新客户的HTML表单,该表单中包含客户表单和客户地址表单两个子表单,地址表单的字段都有Address前缀声明。列如:City属性对应表单字段的Address.City,模型绑定时,自动将表单City字段的值设置到Address.City属性种。

相关特性使用:

当然我们在实际使用中可能不需要绑定所有的对象属性,我们可以通过Exclude和Include来实现排除和指定绑定的属性:

Exclude: 排查绑定的属性列表,列表以逗号隔开

Include:可以绑定的属性列表,列表以逗号隔开

列如,不需要绑定ID属性时:

public ActionResult  Create([Bind(Exclude="ID")]Customer customer)

{

string name=customer.Name;

string city=customer.Address.City;

string Country=customer.Address.Country;

}

当然我们也可以在类中使用绑定特性:

[Bind(Exclude="ID")]

public class Customer

{

public int ID{get;set;}

public string Name{get;set;}

}

总结:

1.Model传值: 文本框的name属性值要和model实体的属性名一一匹配,控制器中可以使用实体类的方式接收参数

2.Request.Form获取Post方式提交的数据

3.FormConnection集合传值

原文:代码里(www.daimali.com)原文链接

时间: 2024-08-11 09:56:46

控制器读取视图表单中的数据的几种方式的相关文章

用PHP读取MyAQL表单中全部数据并将数据整理翻页

要注意的是我们的PHP是嵌入在html中的 <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <style type="text/css"> </style> </head> <body> <

ios网络学习------4 UIWebView的加载本地数据的三种方式

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBund

EF5(7) 后台使用SelectListItem传值给前台显示Select下拉框;mvc后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式

一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Order控制器,显示订单列表,并且在修改订单的时候,把用户的id 用 select 下拉框显示出来,并且可以提交修改数据   1.1 我们通过比较原始的方法,来把数据 传递到前台后,前台使用  循环来显示 select 并且显示是哪个元素被选中 我们在前台的cshtml中,使用 @model 命令 指定

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

向服务器传json数据的两种方式

接触到了向服务器传JSON数据,那么怎么把参数以JSON的形式,传到服务器呢.下面来说说,json字符串的得到方法.一共有两种方式来得到Json的字符串.当然,向服务器上传,不能传字符串,是要转成NSData的,也就是二进制的形式.这个在此不讨论,只说,怎么得到json的字符串. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法,是把要传的参数

SpringMVC返回json数据的三种方式

SpringMVC返回json数据的三种方式:http://blog.csdn.net/shan9liang/article/details/42181345 上述第三种方法:可能会出现这个jar包没有的情况,引入即可,下面pom引入即可 java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

获取数据库增量数据的几种方式

获取数据库增量数据的几种方式 a.触发器:在要抽取的表上建立需要的触发器,一般要建立插入.修改.删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除.触发器方式的优点是数据抽取的性能较高,缺点是要求业务表建立触发器,对业务系统有一定的影响. b.时间戳:它是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值.当进行数据抽取时,通过比较系统时

【代码笔记】向服务器传JSON数据的两种方式

一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法,是把要传的参数组合成一个数组,然后由JSONKit把字典转为字符串 NSDictionary* jsonDic = [NSDictionary dictionaryWithObjectsAndKeys:@"李华",@"name",@"女&quo

django获取单表数据的三种方式

django获取单表数据的三种方式 v1 = models.Business.objects.all() # QuerySet ,内部元素都是对象 v2 = models.Business.objects.all().values('id','caption') # QuerySet ,内部元素都是字典 v3 = models.Business.objects.all().values_list('id','caption') # QuerySet ,内部元素都是元组 def business(