ASP.NET MVC 控制器与视图

一、控制器相关

在Controller类中方法访问级别为public的方法,就是行为(Action).如果不希望Controller类中的方法成为Action(可以在地址栏中被访问),有两种实现方式:将方法的访问级别设置为private在方法上添加特性标记[NonAction]

                  

诸如新增\修改等功能模块,我们往往会创建2个名称相同的Action:一个action用于加载新增\修改页面;另一个action用于处理新增\修改页面提交的表单数据.那么如何区分在何时调用哪个action呢?

  我们将加载新增|修改页面时被调用的action,添加[HttpGet]特性标记;将处理页面提交的表单数据时调用的action,添加[HttpPost]特性标记.

下面的示例代码演示了如何实现学生的新增(action相关的代码).

                  

如何在Action中获取表单提交的数据?

表单中提交的数据,可以通过Action的参数进行映射.

映射的前提条件:Html标记的name属性值和action中参数的名称要一致.

下面的示例代码演示了映射的过程(注意粉色框标记的部分):

                  

Action中如何映射复杂对象?

对于上面的映射代码,我们还可以有另外一种等价的写法,就是将映射的属性定义到一个实体类中,这样我们就可以在action中添加该实体类型的参数,参考代码如下所示:

                  

如何从一个Action中跳转至另外一个Action?

新增或修改功能完成后,需要跳转至数据列表页面,我们可以通过如下代码实现:

代码 => return RedirectToAction(“ActionName”, “ControllerName”).

二、视图相关

在ASPX视图引擎中,可以使用asp服务器控件,但它的作用仅仅局限与生成html代码,而不推荐开发人员使用asp控件的事件.因此建议开发人员手工编写Html标记。

但是手写Html标记比较耗费时间,有没有更好的解决方案?答案就是使用Html辅助方法。

Html辅助方法

Html辅助方法的作用就是通过调用C#方法的方式,快速的生成相应的html标记.

Html辅助方法分为2大类:弱类型html辅助方法和强类型html辅助方法.

其中以For关键字结尾的都是强类型的辅助方法.下面的示例代码演示了二者的调用方式,以及生成的html源码。

                  

注意:Html辅助方法有很多种重载形式,在开发过程中可以根据实际需要自行选择.比如要实现一个包含class\style\onchange属性和事件的单行文本框,可以参考如下代码: 

                  

强调:如何使用HTML辅助方法生成form标记?

生成form标记的两个Html辅助方法为:Html.BeginForm()和Html.EndForm(),但他们在使用时和其他的Html辅助方法有所不同,下面的示例代码演示了它们的两种用法:

                  

如何在URL地址中传递参数?

场景一:将学生ID值映射到名称为id参数上

场景二:将学生ID值映射到名称为stuId参数上

场景三:url地址中包括stuId和name两个参数

这三种场景的使用代码如下所示:

                  

其他在实际开发过程中,一个小的功能模块就对应一个控制器.比如学生信息管理就是一个控制器,新增学生\修改学生\查询学生列表\删除学生都可以对应控制器中的Action.常用Html辅助方法汇总

 
弱类型


强类型


单行文本框


Html.TextBox()


Html.TextBoxFor()


多行文本框


Html.TextArea()


Html.TextAreaFor()


密码框


Html.Password()


Html.PasswordFor()


复选框


Html.Checkbox()


Html.CheckBoxFor()


单选按钮


Html.RadioButton()


Html.RadioButtonFor()


下拉列表框


Html.DropdownList()


Html.DropdownListFor()


平铺列表框


Html.ListBox()


Html.ListBoxFor()


Label


Html.Label()


Html.LabelFor()


Form表单


Html.BeginForm() Html.EndForm()


超链接


Html.ActionLink()

如何在视图中使用下拉列表

第一步:在action中构造好下拉列表中需要的数据,数据的类型为IEnumerable<SelectListItem>。

第二步:将构造好的数据放到Controller中的ViewData(ViewBag|TempData)属性中。

第三步:在视图view中使用Html.DropDownList辅助方法来生成下拉列表,而绑定的数据可以使用视图View中的ViewData来获取(换句话讲就是,Controller中放置到ViewData的数据,可以在视图View中的ViewData属性中提取)。

                  

在视图中使用Html.DropDownList绑定Ienumerable<SelectListItem>

                  

时间: 2024-08-05 22:40:39

ASP.NET MVC 控制器与视图的相关文章

Asp.Net Mvc 控制器与视图的数据传递

数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业务层获得一些数据,怎么传递到视图中,让视图显示在客户端呢?带着这些疑问,我们接着看..        下面分别讲解asp.net mvc框架中有三种数据传递方式,分别是:ViewData,TempData,Model         ViewData:只能在一个动作方法中设置,在相关视图页面读取,说得再白一点就是只能在一个页面中使用.         例 在Act ion方法中设置:ViewData["

Asp.Net MVC控制器获取视图传值几种方式

前台表单(V:视图) 1 @{ 2 Layout = null; 3 } 4 5 <!DOCTYPE html> 6 7 <html> 8 <head> 9 <meta name="viewport" content="width=device-width" /> 10 <title>UserRegist</title> 11 </head> 12 <body> 13 &

ASP.NET MVC学习之视图篇(2)

继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用foreach就可以完成,但是这个仅仅只是针对单个循环,如果多个循环中都要使用到同样的标签呢?下面笔者就介绍两种方式让我们事半功倍. 首先是针对单个页面的内联辅助器,如果我们遇到只要在单个页面中不断使用的标签的时候,这个方式非常的轻便,比如下面的代码根据文本内容和样式类生成li标签的辅助器(Views/H

Asp.Net MVC 控制器

原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(action results)这几个主题.在读完本篇教程之后,你将会理解控制器如何控制访问者与ASP.NET MVC网站进行交互的方式. 1.理解控制器 MVC控制器负责响应对ASP.NET MVC网站发起的请求.每一个浏览器请求都映射到了一个专门的控制器.举个例子,设想一下你在浏览器地址栏输入了下面

学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器

MVC全称是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑和数据显示分离的方法组织代码,将业务逻辑被聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑.MVC是一种具有可测试性和易于维护的应用程序开发模式. 基于MVC的应用程序应该包含以下内容: ?模型:表示应用程序核心,是该应用程序中用来进行校验.执行业务逻辑的数据类,业务实体对象. ?视

ASP.NET MVC 控制器(二)

ASP.NET MVC 控制器激活(二) 前言 在之前的篇幅中,用文字和图像来表示了控制器的激活过程,描述的角度都是从框架默认实现的角度去进行描述的,这样也使得大家都可以清楚的知道激活的过程以及其中涉及到的对象模型,今天的篇幅就是在激活的过程中,框架提供了哪些可注入点,站在一个使用者的角度来进行描述. 激活控制器-注入点入口 如上图,这是上个篇幅中描述的控制器激活过程图,这里引用过来是怕有的朋友忘记了前面的所说和没看过前面篇幅的朋友. 就从默认控制器工厂的实现来看,在CreateControll

学习笔记:Asp.Net MVC更新部分视图实现

Asp.Net MVC 更新部分视图实现 设想我们有一篇文章下面的提交评论时如何只刷新评论内容部分, 方法一,利用ajax通过js代码实现. 方法二,利用Ajax.BeginForm()+部分视图实现. 通过js代码的方法比较常见,这里主要是探讨通过Ajax.BeginForm()+部分视图的方式实现.这样还可提高该视图的重用性.同理,有多处引用的零部件或页面部分内容更新等,也可以利用此方法实现. Step1,创建生成Form的Action,代码如下: [ChildActionOnly()] p

007.ASP.NET MVC控制器依赖注入

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

转载:ASP.NET MVC扩展自定义视图引擎支持多模板&amp;动态换肤skins机制

ASP.NET mvc的razor视图引擎是一个非常好的.NET MVC框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的项目支持多模板&skins机制,比如我们可能会有多套的模板,也就是多个View风格,而我们只需要改一下配置文件就可以轻松的改变页面的风格和模板.实现这个功能有两种方式: 一.使用接口IViewEngine自己完成一个类似Razor视图引擎的功能. 二.继承类RazorViewEngine类,重写它的一些方