9、ASP.NET MVC入门到精通——Controller(控制器)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总
Controller主要负责响应用户的输入。主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)输出数据的提供。
- 继承自:System.Web.Mvc.Controller
- 一个Controller可以包含多个Action. 每一个Action都是一个方法, 返回一个ActionResult实例
- 一个Controller对应一个xxController.cs控制文件,对应在View中有一个xx文件夹。一般情况一个Action对应一个View页面
Controller Action方法参数与返回值
Action方法接收参数:
a.接收浏览器传过来的参数(get-两种格式/post)
a1.接收FormCollection Request.Form
1.通过Request.Form["name"] 逐个获取 表单提交的数据
在View视图中
@Html.TextBoxFor(x => x.CusName, new { @class = "trade-timen", @id = "cusName" })<span class="wtps">* @Html.ValidationMessageFor(m => m.CusName)
控制器中
[HttpPost]
public string UpdateCustomerInfo(FormCollection form)
{
return Request.Form["CusName"];;
}
注意:在View界面要存在name属性为CusName的表单元素,因为提交表单数据的时候,只会提交所有带name标签的数据。
2.通过 FormCollection form逐个获取 表单提交的数据
[HttpPost]
public string UpdateCustomerInfo(FormCollection form)
{
return form["CusName"];
}
a2.接收Model
通过 实体对象 一次性获取 表单元素的数据,并设置到实体对象对应的属性中
/// <summary>
/// 修改客户
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
public ActionResult UpdateCustomer(CustomerInfo info)
{
string msg = string.Empty;
if (ModelState.IsValid)
{
try
{
CustomerInfo model = CustomerInfo.Load(info.ID);
model.CusCode = info.CusCode;
model.CusName = info.CusName;
model.Phone = info.Phone;
model.Tel = info.Tel;
model.Email = info.Email;
model.Fax = info.Fax;
model.Country = info.Country;
model.Address = info.Address;
model.CompanyName = info.CompanyName;
model.BusssinessType = info.BusssinessType;
model.Status = info.Status;
model.Update();
msg = "修改客户成功。";
}
catch (Exception ex)
{
msg = "修改客户失败!" + ex.Message;
ViewBag.Msg = string.Format(message, msg, false, "1");
}
ViewBag.Msg = string.Format(message, msg, true, "0");
}
return View();
}
注意: 表单中的表单元素的属性名称必须和实体对象的属性一样!
折叠类中所有方法:ctrl+m+o
折叠类中所有的代码块,包括类:ctrl+m+l
b.接收Get数据,Request.QueryString
直接通过请求上下文对象里的 Request获取 url ?后的的参数:
浏览器请求路径为:/User/UserList/1?kjy=jp
控制器获取:Request.QueryString["kjy"];
Action方法输出返回值:
b1.string:直接 返回响应报文字符串;
b2.ActionResult:返回控制器结果对象
(里面会包含什么呢?能做什么呢?)
b3.JsonResult:返回 Json 字符串
Action的返回值-ActionResult

Action指定使用视图
public ActionResult Index()
{
return View();//默认情况下不给参数返回和方法同名的视图,即使用视图 Index.cshtml 路径在当前控制器对应的View目录下面
return View("OtherIndex");//使用 OtherIndex.cshtml
return View("~/Views/Home/Test.cshtml");
}
Controller是如何向View进行数据传输的呢?
控制器将处理后的数据“传”给视图的方式
ViewData/ViewBag/TempData/Model
我们先来看下示例
控制器代码:
public ActionResult Index()
{
ViewBag.UserName = "小李飞刀";
ViewData["UserName"] = "陆小凤";
TempData["UserName"] = "楚留香";//临时数据 User model = new User { UserName = "谢晓峰" }; return View(model); //这行代码其实就相当于ViewData.Model=model
}
View代码:
@{
ViewBag.Title = "Index";
}
<div>@ViewBag.UserName </div>
<div>@ViewData["UserName"] </div>
<div>@TempData["UserName"] </div>
<div>@Model.UserName</div>
Model其实就是ViewData.Model
大家可能觉得这十分显而易见,结果肯定是

发现,只要从TempData中取出一个元素,就会立即将此元素移除!

Model 强类型参数
在控制器里的Action方法最后 调用View加载视图的时候,将 数据对象传入。
return View(model);
视图中,可以通过 Model属性获取!并且不需要转型就可以直接使用!

注意:Model虽然可以不转型就直接使用,但是 因为编译器无法在编译时获取它的类型,所以就无法出现智能提示!为了解决这个问题,我们可以在试图的最上面通过代码指定model类型

查看源码:
当我们在试图上添加了 @model指令时

当前视图就会继承于 WebViewPage<T> 强类型视图页面类,并且指定T为Student:

如果没有添加@model指令:当前视图就会继承于 WebViewPage<T> 强类型视图页面类,但T变成了 dynamic
到这里,Controller的数据怎么就传到View了,我明明只给Controller中的ViewData/ViewBag/TempData/赋值了,或者只把对象传给了View方法。
为什么View中就可以直接调用了呢?我们知道以前的ASP.NET,aspx和aspx.cs是一个继承关系,子类可以直接调用父类的属性方法。你ASP.NET MVC中View和Controller之间又有什么关系呢?
View和Controller中都有ViewData/ViewBag/TempData这几个对象,在给Controller中这些对象赋值后,Controller会把这些值赋值給View中对应的这几个对象。
本系列目录:ASP.NET MVC4入门到精通系列目录汇总
9、ASP.NET MVC入门到精通——Controller(控制器)的更多相关文章
- 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...
- 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...
- 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...
- 8、ASP.NET MVC入门到精通——View(视图)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...
- 10、ASP.NET MVC入门到精通——Model(模型)和验证
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 模型就是处理业务,想要保存.创建.更新.删除的对象. 注解(通过特性实现) DisplayName Required StringLengt ...
- 12、ASP.NET MVC入门到精通——HtmlHelper
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 HtmlHelper:是为了方便View的开发而产生 HtmlHelper的演变 普通首页超级链接为:<a href="/h ...
- 14、ASP.NET MVC入门到精通——Ajax
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Unobtrusive Ajax使用方式(非入侵式) 非入侵式,通俗来讲:就是将嵌入在Html中的JavaScript全部取出来,放在单独的 ...
随机推荐
- 《Entity Framework 6 Recipes》中文翻译系列 (19) -----第三章 查询之使用位操作和多属性连接(join)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-16 过滤中使用位操作 问题 你想在查询的过滤条件中使用位操作. 解决方案 假 ...
- Java 线程 — ThreadPoolExecutor
线程池 线程池处理流程 核心线程池:创建新线程执行任务,需要获取全局锁 队列:将新来的任务加入队列 线程池:大于corePoolSize,并且队列已满,小于maxPoolSize,创建新的worker ...
- Entity Framework Code First执行SQL语句、视图及存储过程
1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...
- ClickOnce部署(3):使用证书
在讲述证书的使用前,我们先来了解另外一个知识——发布网页. 在前面所说的ClickOnce部署中,如果大家细心的话,应该会发现这么个问题. 如上图,发布成功后,在"输出"窗口中提示 ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
- contains与compareDocumentPosition
Sizzle中有一个contains方法(jQuery.contains),用来遍历是否包含指定的元素 IE率先引入一个contains()方法,可以在节点中查找某一个节点是不是当前节点的厚点,如果 ...
- Change Line Type in OpenCascade
Change Line Type in OpenCascade eryar@163.com 关键字KeyWords:OpenCascade,Line Aspect, Line Type 在OpenCa ...
- Mesh Data Structure in OpenCascade
Mesh Data Structure in OpenCascade eryar@163.com 摘要Abstract:本文对网格数据结构作简要介绍,并结合使用OpenCascade中的数据结构,将网 ...
- ksoap调用webservice
Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布 ...
- 从零开始编写自己的C#框架(3)——开发规范
由于是业余时间编写,而且为了保证质量,对写出来的东西也会反复斟酌,所以每周只能更新两章左右,请大家谅解,也请大家耐心等待,谢谢大家的支持. 初学者应该怎样学习本系列内容呢?根据我自己的学习经验,一般直 ...