MVC学习系列9--控制器接收从视图传递过来的参数
前面学习了,从控制器向视图传递数据,现在学习怎么从视图向控制器传递数据。
通常,我们有两种方式,来处理浏览器的请求,一个是GET方式,一个是POST方式。一般来说,直接通过在浏览器中输入URL话,请求的方式是GET,那么GET方式的Action方法将会被调用,另一方面,如果是点击一个Button提交一个表单的话,这个时候POST方式的Action就会被调用。
这里我们说的是POST方式,怎么从视图向控制器传递数据,即把用户输入的表单信息的数据,传递到控制器对应的Action方法中。
这里先列举一下,从视图向控制器传递数据有4种方法:
- 使用传统的方法【Request】
- 使用FormCollection方式
- 自定义参数的方式
- 模型绑定
先看看,传统的方式:
1.首先新建一个空白的MVC项目:,新建一个控制器Home
public ActionResult Index()
{ return View();
} #region 1.传统的方式:通过Qequest方式获取从视图传递过来的数据
[HttpPost]
public ActionResult PostIndex()
{
//1.传统的方式:通过Qequest方式获取从视图传递过来的数据
//这里的Request["Name"]中的Name是文本框中的name属性值,
//不能在视图中去掉,否则报错:未将对象引用设置到对象的实例
//Request不能通过索引来取值,即Request[0]
string name = Request["Name"].ToString();
string sex = Request["Sex"].ToString();
int age = Convert.ToInt32(Request["Age"].ToString());
string phone = Request["Phone"].ToString();
StringBuilder sb = new StringBuilder();
sb.Append("<b>Name:" + name + "</b><br/>");
sb.Append("<b>Sex:" + sex + "</b><br/>");
sb.Append("<b>Age:" + age + "</b><br/>");
sb.Append("<b>Phone:" + phone + "</b><br/>");
return Content(sb.ToString());
}
#endregion
对应的Index视图
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style type="text/css">
#parentDIV {
border:1px solid green;
text-align:center;
}
</style>
</head>
<body>
<div>
@using (Ajax.BeginForm("PostIndex", "Home", new AjaxOptions() { UpdateTargetId = "myDIV", HttpMethod = "POST" }))
{
<div id="myDIV"></div>
<div id="parentDIV">
<div>
@*label中的for里面的值是相对应的文本框的ID值*@
<label for="Name">姓名:</label>
<input type="text" value="" placeholder="姓名" id="Name" name="Name" />
</div>
<div>
<label for="Man">性别:</label>
@*提交的是值value*@
<input type="radio" name="Sex" id="Man" value="男" />男<input type="radio" name="Sex" id="Female" value="女" />女
</div>
<div>
<label for="Age">年龄:</label>
<input type="text" value="" placeholder="年龄" id="Age" name="Age" />
</div>
<div>
<label for="Phone">电话:</label>
<input type="text" value="" placeholder="电话" id="Phone" name="Phone" />
</div>
<div>
<button>确定</button>
</div>
</div>
}
</div>
</body>
</html>
运行一下项目:

输入数据,点击确定:

这里就是通过传统方式,从视图向控制器传递数据了。
在看看FormCollection方式:
#region 2.通过FormCollection:和Request类似
[HttpPost]
public ActionResult PostIndex(FormCollection formCol)
{
//2.通过FormCollection:和Request类似
///不能在视图中去掉,否则报错:未将对象引用设置到对象的实例,
//并且去掉之后,Name的值就获取不到了,在参数里面使用formCol[0],获取到的就是Sex控件的值
//string name = formCol[0].ToString();
string name = formCol["Name"].ToString();
string sex = formCol["Sex"].ToString();
int age = Convert.ToInt32(formCol["Age"].ToString());
string phone = formCol["Phone"].ToString();
StringBuilder sb = new StringBuilder();
sb.Append("<b>Name:" + name + "</b><br/>");
sb.Append("<b>Sex:" + sex + "</b><br/>");
sb.Append("<b>Age:" + age + "</b><br/>");
sb.Append("<b>Phone:" + phone + "</b><br/>");
return Content(sb.ToString());
}
#endregion public ActionResult Index()
{ return View();
}
结果也是一样的。
在看看自定义参数方式:
#region 3.通过使用自定义参数方式:
[HttpPost]
public ActionResult PostIndex(string name, string sex, string age, string phone)
{
//3.通过使用自定义参数方式:
//这里的参数的名字name,sex,age,phone,
//必须要和视图中的空间的name属性值的名字一样,但大小写可以无所谓;
//因为一般用户输入的数据都是字符串类型的,所以我们在使用参数的时候,都定义成string类型,在用的时候在转化。
//当然也可以定义成其他类型,比如这里的age参数,我可以定义成int? age,也是可以的。
//还有参数的顺序无所谓; //string name = formCol[0].ToString();
//string ame = _name;
//string sex = formCol["Sex"].ToString();
int _age = Convert.ToInt32(age);
//string phone = formCol["Phone"].ToString();
StringBuilder sb = new StringBuilder();
sb.Append("<b>Name:" + name + "</b><br/>");
sb.Append("<b>Sex:" + sex + "</b><br/>");
sb.Append("<b>Age:" + _age + "</b><br/>");
sb.Append("<b>Phone:" + phone + "</b><br/>");
return Content(sb.ToString());
}
#endregion public ActionResult Index()
{ return View();
}
结果一样。
最后看看模型绑定:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace DataFromVIewToController.Models
{
public class Student
{
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string Phone { get; set; }
}
}
#region 4.模型绑定
[HttpPost]
public ActionResult PostIndex(Student model)
{
//4.通过使用模型绑定的方式:
StringBuilder sb = new StringBuilder();
sb.Append("<b>Name:" + model.Name + "</b><br/>");
sb.Append("<b>Sex:" + model.Sex + "</b><br/>");
sb.Append("<b>Age:" + model.Age + "</b><br/>");
sb.Append("<b>Phone:" + model.Phone + "</b><br/>");
return Content(sb.ToString());
}
#endregion public ActionResult Index()
{ return View();
}
@model DataFromVIewToController.Models.Student
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style type="text/css"> #parentDIV {
border:1px solid green;
text-align:center; }
</style>
</head>
<body>
<div>
@using (Ajax.BeginForm("PostIndex", "Home", new AjaxOptions() { UpdateTargetId = "myDIV", HttpMethod = "POST" }))
{
<div id="myDIV"></div>
<div id="parentDIV">
<div>
@*label中的for里面的值是相对应的文本框的ID值*@
<label for="Name">姓名:</label>
@*<input type="text" value="" placeholder="姓名" id="Name" name="Name" />*@
@Html.TextBoxFor(s=>s.Name)
</div>
<div>
<label for="Man">性别:</label>
@*提交的是值value*@
@*<input type="radio" name="Sex" id="Man" value="男" />男<input type="radio" name="Sex" id="Female" value="女" />女*@
@Html.RadioButtonFor(s=>s.Sex,"男") 男
@Html.RadioButtonFor(s=>s.Sex,"女") 女
</div>
<div>
<label for="Age">年龄:</label>
@*<input type="text" value="" placeholder="年龄" id="Age" name="Age" />*@
@Html.TextBoxFor(s => s.Age)
</div>
<div>
<label for="Phone">电话:</label>
@*<input type="text" value="" placeholder="电话" id="Phone" name="Phone" />*@
@Html.TextBoxFor(s => s.Phone)
</div>
<div>
<button>确定</button>
</div>
</div>
}
</div>
</body>
</html>
结果:



MVC学习系列9--控制器接收从视图传递过来的参数的更多相关文章
- MVC学习系列4--@helper辅助方法和用户自定义HTML方法
在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...
- ASP.NET MVC学习系列(二)-WebAPI请求
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- ASP.NET MVC学习系列(二)-WebAPI请求(转)
转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
- ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- MVC学习系列——ModelBinder扩展
在MVC系统中,我们接受数据,运用的是ModelBinder 的技术. MVC学习系列——ActionResult扩展在这个系列中,我们自定义了XmlResult的返回结果. 那么是不是意味着能POS ...
- MVC学习系列——记一次失败面试后,感想。
在此写博客之际,热烈庆祝母校苏州科技学院,正式改名为苏州科技大学. 一晃眼,从自己投身IT行业已经两年有余,期间经历了结婚.买房等人生大事,非常感谢我的老婆,谢谢她这么爱我,嫁给我这个码农,呵呵... ...
- SpringMVC控制器接收不了PUT提交的参数的解决方案
摘要: SpringMVC控制器接收不了PUT提交的参数的解决方案 这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时 ...
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...
随机推荐
- web端限时活动逻辑处理总结
由于要在web端做一个限时活动的功能,功能大致为:一个小时内可以报名参加活动,然后给予报名者奖品,先到先得.用到一些处理逻辑做下总结,以前没有做过类似的东西,都是自己先体验其他网站的报名方式,然后再摸 ...
- apk反编译
在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...
- Scala 笔记
环境 1. Intellij Idea 2. Scala 插件 3. http://scala-lang.org/ 教程: idea官方教程: https://www.jetbrains.com/he ...
- 你必须知道的指针基础-7.void指针与函数指针
一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...
- Net作业调度(二) -CrystalQuartz远程管理
Source Code-1.6M 介绍 上篇已经了解Quartz.NET的基本使用方法了.但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面. 本文介绍Qua ...
- 使用ViewPager+Fragment实现选项卡切换效果
实现效果 本实例主要实现用ViewPage和Fragment实现选项卡切换效果,选项卡个数为3个,点击选项卡或滑动屏幕会切换Fragment并实现选项卡下方下边框条跟随移动效果. 本程序用androi ...
- SQL Server 2012 Managed Service Account
原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...
- 一则spring容器启动死锁问题(DefaultListableBeanFactory/DefaultSingletonBeanRegistry)
线上发现一个问题,应用在启动时会卡死,log上并没有什么异常输出,初判应该是死锁问题. 抓现场的thread dump文件, 确实是有两个线程有deadlock问题. 线程一 "HSFBiz ...
- Atitit wsdl的原理attilax总结
Atitit wsdl的原理attilax总结 1.1. 在 W3C 的 WSDL 发展史1 1.2. 获取wsdl,可能需要url后面加wsdl,也可能直接url1 1.3. Wsdl的作用2 1. ...
- CocoaPods pod 安装、更新慢解决方法
使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动了,令人甚是DT. 每一次都忘记现在自己记录一下 ...