ASP.NET MVC Music Store教程(2):控制器

ASP.NET MVC Music Store教程(2):控制器

转自http://firechun.blog.163.com/blog/static/3180452220110272197830/

在传统的Web架构中,URL总是映射到磁盘上的文件。例如:一个类似于“/Products.aspx”或“/Products.php”的URL可能由“Products.aspx”或“Products.php”文件来处理。

在基于MVC的Web架构中,URL的映射有一些不同,映射到文件被替换成映射到类中的方法,这些类被叫做的“Controllers”(控制 器),由它们来响应和处理HTTP请求、用户输入、接收和保存数据,并且决定如何将响应发回到客户端(显示HTML,下载文件,重定向URL等)。

添加 HomeController
我们通过添加一个控制器类来开始我们的MVC Music Store应用程序,它将处理链接到网站主页的URL。遵照ASP.NET MVC的命名约定,我们给这个类取名“HomeController”。

在“解决方案资源管理器”中的“Controllers”文件夹上单击右键,选择“添加->控制器”命令:

ASP.NET MVC Music Store教程(2) - firechun - firechun的博客

 在“添加控制器”对话框中,将默认名称改为“HomeController“,按“添加”按纽。

ASP.NET MVC Music Store教程(2) - firechun - firechun的博客

 这将创建一个新的文件——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改成string
  • 修改return语句返回字符串“Hello from home”
现在,方法看起来是这样:
public string Index()  {      return "Hello from Home";  }
启动应用程序
原文很详细,从来没用过VS的看原文也知道怎么运行,这里不写了,总之现在可以启动程序,按F5(调试启动)或Ctrl-F5(不调试启动)
我们看到了这个:
ASP.NET MVC Music Store教程(2) - firechun - firechun的博客
 OK,相当快捷,我们创建了一个新的Web站点,添加了三行代码,在浏览器中呈现出一段文本。很明显,这只是开始。
(关于VS虚拟IIS服务器的说明文字,不写了)
添加 StoreController
我们添加了一个简单的HomeController实现网站主页,现在,我们添加另一个控制器来实现音乐仓库的浏览功能。仓库控制器将实现下列功能:
  • 音乐仓库的类别列表页面
  • 列出某类别下的所有音乐唱片页面
  • 显示指定音乐唱片的详细信息
(原文很啰嗦,不写了)
重复添加HomeController的过程,将名字改为StoreController。
新的StoreController已经有了Index方法,我们使用Index方法来实现所有类别的列表页面,同时再添加二个方法Browse和Details来实现另外两个功能。
这些Controller(控制器)中的方法——Index、Browser和Detail被称为“Controller Actions”,如同你已经看到的HomeController.Index()动作方法,它们的工作是响应URL的请求并且(通常来说)决定什么样的内容发回到浏览器或用户请求的URL。
我们修改Index()方法,让它返回字符串“Hello from Store.Index()”,对Browse()和Details()方法也做类似的修改以完成StoreController的实现。
using System; 
 using System.Collections.Generic; 
 using System.Linq; 
 using System.Web; 
 using System.Web.Mvc; 
  
namespace MvcMusicStore.Controllers 

    public class StoreController : Controller 
    { 
        // 
        // GET: /Store/ 
        public string Index() 
        { 
            return "Hello from Store.Index()"; 
        } 
        // 
        // GET: /Store/Browse 
        public string Browse() 
        { 
            return "Hello from Store.Browse()"; 
        } 
        // 
        // GET: /Store/Details 
        public string Details() 
        { 
            return "Hello from Store.Details()"; 
        } 
    } 
}
再次启动项目并分别在浏览下列URL:
  • /Store
  • /Store/Browse
  • /Store/Details
访问这些URLs将调用控制器中的动作方法并返回字符串:
太棒了!不过这仅仅是一些固定不变的字符串,我们来让它们变成动态的:从URL中获得一些信息并把它输出到网页上。
首先,我们修改Browser动作方法,让它接收来自URL的参数(QueryString)。我们为动作方法添加一个参数——gener,当动作方法被调用时,ASP.NET MVC会通过URL的QueryString或表单提交自动为它传递一个叫“gener”的参数。
// 
// GET: /Store/Browse?genre=?Disco 
public string Browse(string genre) 
 { 
    string message = HttpUtility.HtmlEncode("Store.Browse, Genre = " 
+ genre); 
  
    return message; 
 }
注意: 我们使用HttpUtility.HtmlEncode方法审核用户输入,这可以防止用户使用类似/Store/Browse?Genre=<script>window.location=’http://hackersite.com’</script>这样的链接对视图进行JavaScript注入攻击user 
现在,我们来浏览/Store/Browse?Genre=Disco
下一个修改是让Details动作读取并显示一个名叫“ID”的输入参数。与上一个方法不同的是,我们不想把ID的值放到QueryString参数中,而是直接把它作为URL的一部份,例如:/Store/Details/5
ASP.NET MVC很容易让我们实现这样的想法而不需要做任何设置,ASP.NET MVC的默认路由设置把URL中动作方法后面的部份看成一个名叫“ID”的参数,如果你的动作方法有一个叫“ID”的参数,ASP.NET MVC会自动这部份做为参数传递。
// 
// GET: /Store/Details/5 
public string Details(int id) 
 { 
    string message = "Store.Details, ID = " + id; 
  
    return message; 
 }
运行应用程序并且浏览/Store/Details/5
看看到目前为止我们做了什么:
  • 在VS中创建了一个新的ASP.NET MVC项目
  • 讨论了ASP.NET MVC应用程序的基本的目录结构
  • 学习了如何使用ASP.NET开发服务器运行Web站点(这部份我没写。。。)
  • 创建了两个控制器类:HomeController和StoreController
  • 在控制器中添加了动作方法响应URL请求并把文本返回给浏览器
 
posted on 2011-11-17 13:39 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/archive/2011/11/17/2252564.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言:利用泰勒级数计算sinx的值

题目&#xff1a; 代码&#xff1a; #include<stdio.h> #include<math.h> int main(){int sign1,n1;double x3,term,a,sinx0;//scanf("%lf",&x);termx;while(fabs(term)>0.00001){sinxsign*term;nn2;apow(x,n);double b1;for(int i1;i<n;i){…

C++课堂整理--第二章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1程序控制结构 语句是程序的基本语法成分。程序设计语言的语句按功能可以分成三类&#xff1a;声明语句 指示编译器分配内存&#xff0c;或者提供程序…

我的电脑 III

耳机用的是飞利浦的&#xff0c;和上学那时候的差不多 老的那个睡觉的时候压碎了&#xff0c;我胖了 然后去找音箱 网店&#xff0c;专卖店&#xff0c;电脑城&#xff0c;走了一遍又一遍 没个看的上的 一个月以后&#xff0c;终于决定买飞利浦那个了 白色的&#xff0c;和整个…

mybatis删除成功返回0_你还在用分页?试试 MyBatis 流式查询,真心强大!

转自&#xff1a;捏造的信仰segmentfault.com/a/1190000022478915基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器&#xff0c;应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询&#xff0c;我们想要从数据库取 1000…

C++程序设计--第三章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1.函数 函数作用 —— 任务划分&#xff1b;代码重用定义形式 类型 函数名 &#xff08; 形式参数表&#xff09;{语句序列}调用形式 函数名&#x…

Linux TCP server系列(5)-select模式下的单进程server

目标&#xff1a; 让服务器退化为单进程模式&#xff0c;但是利用select来提升性能 思路&#xff1a; &#xff08;1&#xff09;服务器 传统的单进程服务器一旦accept了客户端的TCP连接后&#xff0c;就转入客户请求的处理&#xff0c;处理完成后才能再一次的调用…

替换元素_80%的前端会答错的问题:lt;imggt;是什么元素?

前言某天晚上&#xff0c;和几个朋友去撸串&#xff0c;突然就聊到了面试&#xff0c;都在感叹现在的面试题太变态了&#xff0c;其中一个突然很神秘的问我&#xff1a;“你写前端这么久了&#xff0c;那你知道 <img> 是什么元素吗&#xff1f;”于是我结合平时写页面的经…

用指针变量访问数组

一维指针 地址值 a 相当于 & a[ 0 ] a 1 相当于 & a[ 1 ] a 2 相当于 & a[ 2 ] a i 相当于 & a[ i ] 元素值 a [ 0 ] * a a [ 1 ] 相当于 * ( a 1 ) a [ 2 ] 相当于 * ( a 2 ) a [ i ] 相当于 * ( a i ) 二维 用指…

Linux TCP server系列(6)-select模式下的多线程server

目标&#xff1a; 修改上一篇的select模式下的server&#xff0c;让它使用多线程来处理客户端请求&#xff08;多进程的模式已经在上篇中加了注释&#xff09;。 思路&#xff1a; &#xff08;1&#xff09;服务器 我们已经在之前的客户端模型多个并发用户的过程中使用过多线程…

单选按钮_PerlTk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton(附完整代码)...

《Perl-Tk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton》Perl-Tk中有三种不同形式的按钮组件可供选择&#xff0c;它们分别是按钮(Button), 复选按钮(Checkbutton), 和单选按钮(Radiobutton)&#xff0c;如下图所示&#xff1a;这三种按钮看起来是不同的&#…

好奇怪呀后面加什么标点_狗狗吃饭时奇怪的小动作,你知道代表什么吗?做个懂狗的好主人...

狗狗有时候因为一些奇怪的小行为&#xff0c;会让主人觉得很可爱。如果我们希望能够了解狗狗更多一些&#xff0c;那么我们需要透过它们的行为本身&#xff0c;去理解背后所代表的含义&#xff0c;才能和狗狗更亲密的交流。很多狗狗在吃饭的时候&#xff0c;也会表现出一些奇奇…

开机未发现nvidia控制面板_修改这几个选项,就能提升你的开机速度

最近电脑非常卡&#xff0c;有时真的想把它给砸了&#xff0c;慢的自己都受不了&#xff0c;开机几分钟&#xff0c;开机完还要等上好久才能运行软件&#xff0c;都快受不了&#xff0c;要不是看在已经是10前的买的电脑&#xff0c;早就问候产商了&#xff0c;电脑缓慢的开机速…

arcgis mxt模板 创建工具条无法保存_【从零开始学GIS】ArcGIS中的绘图基本操作(二)...

大家好&#xff0c;我是肝教程肝到熊猫眼的三三。本系列教程的发布&#xff0c;受到了很多同学的鼓励&#xff0c;大家在后台或微信上表达出对教程的喜爱&#xff0c;这便是更新教程的最大动力。上回教程讲解了“GIS基本操作”、“创建文档&#xff06;加载数据”、“创建GIS数…

vivado中交织模块_搞定Markdown中的图片,一劳永逸的方法!

经常用markdown写博客的朋友一定都体会过markdown图片的蛋疼之处&#xff0c;并不是说图片的这用引用方式不好&#xff0c;而且图片要放到什么服务器上&#xff1f;以我个人为例&#xff0c;写了一篇markdown&#xff0c;想在不修改任何地方的同时适用于各种平台。刚开始使用ma…

delphi xe2 project菜单怎么没有加组件功能_交互设计:让人困惑的三大交互组件及用法...

本篇文章中&#xff0c;笔者带我们了解了三大交互组件专有名词的用法&#xff0c;并结合实际案例进行了解释说明&#xff0c;与大家分享。希望通过此文能够加深你对交互组件及其用法的理解和分析。最近有很多同学来问一些设计中组件的专业名词&#xff0c;发现大家好像都没有一…

北斗三号b1c频点带宽_北斗三号导航信号的创新设计(一)

《测绘学报》构建与学术的桥梁 拉近与权威的距离一需求与挑战1.1 卫星导航信号的作用与意义卫星导航信号是由导航卫星向地球表面播发的无线电测量信号&#xff0c;承担着传递时空基准信息和实施被动测距两大任务&#xff0c;是卫星导航系统实现三边定位的核心载体。卫星导航信号…

g++ linux 编译开栈_linux gcc和g++版本的修改

##编译的时候容易遇到&#xff1a;unsupported GNU version! gcc versions later than 6 are not supported这样的错误。所以我们要更改系统的gcc和g编译器版本。首先我们要知道一个基础的常识&#xff0c;一般而言&#xff0c;linux系统会把gcc和g默认安装在/usr/bin/的目录下…

Linux I2C核心、总线与设备驱动(一)

本章导读 I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互&#xff0c;极大地简化对硬件资源和PCB板布线空间的占用。因此&#xff0c;I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。 Linux定义了系统的I2C驱动体系结构&#xff0c;在L…

ebay注册流程_跨境电商平台eBay企业入驻流程

整个流程一共包括8个部分了解企业入驻通道企业入驻通道将帮助现有eBay大中华卖家申请并获得高刊登额度的新账户&#xff0c;以满足卖家在品类拓展以及站点拓展的需求。准备材料1.营业执照2.法人代表身份证明&#xff0c;或eBay帐户注册人身份证明&#xff08;根据地区法规有不同…

Linux I2C核心、总线与设备驱动(二)

从上面的分析可知&#xff0c;虽然I2C硬件体系结构比较简单&#xff0c;但是I2C体系结构在Linux中的实现却相当复杂。当工程师拿到实际的电路板&#xff0c;面对复杂的 Linux I2C子系统&#xff0c;应该如何下手写驱动呢&#xff1f;究竟有哪些是需要亲自做的&#xff0c;哪些是…