ASP.NET MVC3书店--第二节 控制器(转)
在使用MVC框架的Web应用程序中,在处理URL请求时使用了一个稍微有点区别的映射方式。URL请求会被映射为某个类的某个方法,而不是被映射为一个 文件。这些映射URL请求的类被称为控制器,负责处理传入的HTTP请求,处理用户输入,获取与保存数据,执行返回给客户端的响应(显示HTML代码,下 载文件,重定向到其他URL等等)。
2.1 追加一个主页控制器
鼠标右击解决方案资源管理器中的Controllers文件夹,点击添加-〉控制器,如图2-1所示。
图2-1 添加控制器
在弹出的“添加控制器”对话框中,将控制器命名为“HomeController”,如图2-2所示,然后点击添加按钮。
图2-2 命名控制器
观察解决方案资源管理器,Controllers文件夹中新增加了一个文件,名字为HomeController.cs,并且该文件呈打开状态,文件中代码如代码清单2-1所示。
代码清单2-1 HomeController.cs文件中的默认代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusicStore.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
}
这段代码是一个控制器类中最简单的代码。接下来让我们修改Index方法为一个简单的返回一个字符串的方法。我们将执行如下两个简单修改:
- 将返回ActionResult对象的Index方法修改为返回一个字符串的方法(方法头部)。
- 将返回(return)语句修改为返回“主页”。
代码如下所示。
public string Index()
{
return "主页";
}
2.2 运行应用程序
现在让我们运行这个应用程序。我们可以使用以下几种方法来运行。
- 点击“调试”菜单下的“启动调试”子菜单。
- 点击工具条中的绿色按钮,如图2-3所示。
图2-3 点击工具按钮运行应用程序
- 使用快捷键(F5键或Ctrl+F5键)。
使用其中的任何一种方法都会进行我们的应用程序的编译工作,然后运行一个Visual Web Developer中内置的ASP.NET开发服务器。屏幕的右下角会出现一个小的服务器图标,标示ASP.NET开发服务器已经运行,并且显示服务器所使用的端口号,如图2-4所示。
图2-4 ASP.NET开发服务器图标
接着,Visual Web Developer将会打开一个浏览器窗口,其地址指向我们的应用程序在开发服务器中的地址,如图2-5所示。这使得我们可以迅速地看见我们的应用程序的起始页面。
图2-5 应用程序的起始页面在浏览器中的显示
OK,这一切都是非常方便快捷的—我们创建了一个新的Web网站,追加了一个三行的方法,在浏览器中查看到了我们指定返回的文字。
注意:在Visual Studio中内置了一个ASP.NET开发服务器,它将在你的计算机中随机挑选一个端口来运行。在图2-5中,网站运行在“http://localhost:1099/”下,所以端口号为1099。在不同的计算机中,该端口号可能都不相同。假定一个端口号为1099,则本文中“/Store/Browse”表示网址“http://localhost:1099/ Store/Browse”。
2.3 追加一个书籍展示控制器
我们已经添加了一个简单的主页控制器,用来显示我们网站中的主页。现在让我们追加另一个控制器,用来展示我们书店中的各种书籍。我们的书籍展示控制器负责处理以下几个页面:
- 一个列举显示我们书店中所有书籍种类的页面
一个列举显示某个种类中所有书籍的页面
一个详细显示某本书的各种信息的页面
现在我们来追加一个新的StoreController类。在这之前,首先需要通过关闭浏览器或点击调试菜单下的停止调试子菜单来停止应用程序的运行。
接下来,就像之前追加HomeController控制器那样,来追加一个新的StoreController控制器。鼠标右击解决方案资源管理器中的 “Controllers”文件夹,点击添加-〉控制器,并且将其命名为StoreController,如图2-6所示。
图2-6 追加StoreController控制器
点击添加按钮后,查看Controllers文件夹,新增加了一个StoreController.cs文件。查看该文件中的代码,已经自动追加了一个 Index方法。我们将利用这个Index方法来映射列举显示我们书店中所有书籍种类的页面。同时我们将另外追加两个方法来映射其他两个页面: 列举显示某个种类中所有书籍的页面与详细显示单本书籍信息的页面,分别将之命名为Browse方法与Details方法。
在ASP.NET MVC3中,在StoreController控制器中的这些方法(Index,Browse与Details)被称为“控制器中的action方法”。 这些action方法专门被用来响应来自URL的请求,并且决定当用户输入这些URL地址时应该向浏览器或用户返回什么内容。
现在我们修改StoreController控制器中的Index方法,使其返回“StoreController控制器中Index方法的返回内容”,并且用类似的方法修改Browse方法与Detais方法。代码如代码清单2-2所示。
代码清单2-2 StoreController.cs文件中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcBookStore.Controllers
{
public class StoreController : Controller
{
//
// GET: /Store/
public string Index()
{
return "StoreController控制器中Index方法的返回内容";
}
//
// GET: /Store/Browse
public string Browse()
{
return "StoreController控制器中Browse方法的返回内容";
}
//
// GET: /Store/Details
public string Details()
{
return "StoreController控制器中Details方法的返回内容";
}
}
}
重新运行应用程序,并分别在浏览器中访问“/Store”,“/Store/Browse”,“/Store/Details”这些URL地址。访问这些地址会分别调用控制器中的Index方法、Browse方法与Details方法,并返回相应的字符串,譬如访问“/Store/Details”时浏览器中的显示内容如图2-7所示。
图2-7 访问“/Store/Details”时浏览器中的显示内容
现在这些方法中返回的都是固定的字符串。现在我们继续修改这些方法,使其可以返回动态内容,譬如读取URL地址中的一些信息然后显示在页面中。
首先我们修改Browse这个action方法,使其读取URL地址中的一个参数值。我们可以通过在action方法的传入参数中追加一个genre参数来实现这一功能,当调用这个action方法时,ASP.NET MVC可以自动地将URL地址中的参数字符串或表单提交参数中的genre参数值自动传入这个action方法中。
//
// GET: /Store/Browse?genre=?Disco
public string Browse(string genre)
{
string message = HttpUtility.HtmlEncode("StoreController控制器中Details
方法的返回内容, Genre = "+ genre);
return message;
}
注意:代码中使用了HttpUtility.HtmlEncode方法对用户输入进行了编码操作。这样可以防止用户使用类似 “Store/Browse?Genre=<script>window.location=’http: //hackersite.com’</script>.”之类的方法来强行注入JavaScript语句。
现在让我们重新运行应用程序,并在地址栏中输入“/Store/Browse?Genre=novel”,浏览器中的显示如图2-8所示。(对于中文参数 的处理要稍微复杂一些,一般采用按ID编号查询的方式,譬如数据表中小说类的ID编号为4,参数字符串为“/Store /Browse?Genre=4”)
图2-8 URL地址中输入参数后的显示结果
接下来让我们修改Details这个action,使其可以读取并显示输入的ID参数。与之前的处理方法稍有不同,我们不用在参数字符串中加入ID参数,我们可以直接使用URL地址本身来加入ID参数,譬如:“/Store/Details/5”。
对于读取URL地址中ID参数的处理,ASP.NET MVC不需要我们另外进行任何设置,它的默认的路由约定会将一个URL地址中action方法后的一段地址区段自动设定为ID参数。如果你的action方法中有一个名字叫ID的参数,ASP.NET MVC自动将地址栏中的ID参数传入action方法中的ID参数中。
//
// GET: /Store/Details/5
public string Details(int id)
{
string message = "StoreController控制器中Details方法的返回内容, ID = " + id;
return message;
}
重新运行应用程序,并且访问“/Store/Details/5”,浏览器中显示结果如图2-9所示。
图2-9 使用ID参数后浏览器中的显示结果
现在让我们回顾一下我们已经完成了哪些工作:
- 我们已经在Visual Web Developer中创建了一个新的Web项目。
- 我们已经了解了在一个ASP.NET MVC应用程序中有哪些最基本的文件夹以及它们的用途。
- 我们已经知道了应该怎样运行一个Web应用程序。
- 我们已经创建了两个控制器类:一个HomeController控制器与一个StoreController控制器。
- 我们已经在我们的控制器中追加了一些Action方法,用来响应来自URL的请求,并且向浏览器返回文字。
转载于:https://www.cnblogs.com/quietwalk/archive/2011/07/05/2098103.html
ASP.NET MVC3书店--第二节 控制器(转)相关推荐
- ASP.NET MVC3书店--第九节 注册与下订单(第一部分)(转)
http://blog.sina.com.cn/s/blog_6ad539a90100rag1.html 在本节中,我们将要创建一个下订单控制器,该控制器将获取购买者的收货地址与付款信息.在下订单之前 ...
- ASP.NET MVC3书店--第七节 用户及身份验证(转)
http://blog.sina.com.cn/s/blog_6ad539a90100r7jx.html 现在的问题是任何用户都可以通过StoreManager控制器来访问我们的书籍管理页面.接下来让 ...
- ASP.NET MVC3书店--第五节 表单编辑(第二部分)(转)
http://blog.sina.com.cn/s/blog_6ad539a90100r469.html 5.5 使用HTML帮助器来截短文字 使用我们的StoreManager控制器中的Index方 ...
- ASP.NET MVC3 快速入门--第二节 添加一个控制器
MVC的全称为model-view-controller(模型-视图-控制器).MVC是一种开发应用程序的模式,这个模式已经具有了很好的框架架构,并且十分容易维护.使用MVC开发出来的应用程序一般包括 ...
- ASP.NET MVC3 快速入门-第四节 添加一个模型(转)
在本节中我们将追加一些类来管理数据库中的电影.这些类将成为我们的MVC应用程序中的"模型"部分. 我们将使用一个.NET Framework的被称之为"Entity Fr ...
- 第二节:Web前端-ASP.NET之C#基础
第二节:Web前端-ASP.NET之C#基础 学习ASP.NET,要掌握学习语言,控件等技能, <div style="text-align: center; line-height: ...
- Asp.net MVC3.0 入门指南 6 审视编辑方法和视图
审视编辑方法和视图 在这一节中,您将审视movie控制器生成的响应方法和视图.然后您将添加 一个自定义搜索页面. 运行程序并通过在URL追加/Moives浏览movie控制器.把鼠标悬停在Edit 链 ...
- ASP.NET MVC3 快速入门
第一节 概述 (2011-02-23 20:57:18) 转载 标签: web应用程序 分类: ASP.NETMVC3 1.1 本教程的学习内容 在本教程中,你将学会如下内容: • ...
- Asp.Net MVC3 简单入门详解过滤器Filter
为什么80%的码农都做不了架构师?>>> 前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发 ...
最新文章
- 边缘计算技术发展与对策研究
- ubuntu安装好后常用软件安装和配置
- golang key map 所有_Map的底层实现 为什么遍历Map总是乱序的
- 学习一下戴戒指的含义[转]
- 机器学习(十五)隐马尔科夫模型-未完待续
- 解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误
- 使用python+机器学习方法进行情感分析(详细步骤)
- Docker CPU 资源限制——CPU分片功能测试
- JDBC的使用(msql);
- CSS expression VS Script event
- IIS DirectoryEntry
- 计算机考试打字小作文,打字练习作文(通用5篇)
- java gif图片分割合成,js实现GIF图片的分解和合成
- Windows 10 C盘大瘦身
- python知识点大全-2
- M3U8视频AES解密播放
- Robot Framework+Autoit 安装教程
- rpm mysql nokey_rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
- 计算机ctrl加什么作用,ctrl是什么意思 Ctrl键的作用有哪些
- 数据结构知识点 -- 链表(Java实现)
热门文章
- html5多个图片位置_图表分析中的HTML5地图需求,这款BI轻松5步就给解决了
- 马恩驰:R向量化运算
- 信息图形化探索:图形化简历
- ggthemes包:丰富ggplot2的表现力
- 李斌:中国量化投资踏上快速发展期
- linux 内核之美,Linux内核 | 系统调用
- 系统学习机器学习之模型诊断与调试
- js怎么函数怎么给另一个函数传值并且不调用_2020年最火爆的Vue.js面试题
- ubuntu安装linux deepin,Ubuntu 13.04安装Linux Deepin特色软件
- 【知识索引】【汇编语言】