9.3.4  增加StoreController控制器

9.3.4 增加StoreController控制器

上节已经为站点增加一个简单的HomeController作为首页,现在,增加另外一个控制器,可以用来浏览音乐商店,商店控制器将要支持3个功能:

1)列出商店中唱片的分类;

2)浏览商店中某个分类中的唱片列表;

3)显示特定唱片的详细信息。

像HomeController一样,创建StoreController控制器。使用Index()这个方法来实现列出所有分类的列表,同时,增加两个新的方法来实现另外两个功能浏览和明细。这些包含在控制器中的方法,被称为控制器的Action,HomeController中的Index方法就是一个Action,这些Action的作用就是处理请求,然后返回对请求的处理结果。

对于StoreController,首先让Index这个Action返回一个“Hello”串,然后,增加两个方法:Browse()实现唱片分类浏览和Detials()获取唱片详细信息,代码如下:

978-7-111-46863-9-Chapter09-33.jpg

重新运行程序,就可以访问下面的地址了。

978-7-111-46863-9-Chapter09-34.jpg

但是现在仅仅能够返回一些常量的字符串,应将它们变成动态的,首先从URL中获取一些信息,然后把它们显示在返回的页面中。

首先,修改Browse这个Action,使得它可以从URL地址中获取查询信息,为方法增加一个名为“genre”的字符串类型参数,当这样做的时候,ASP.NET MVC就会自动把任何名为genre的请求参数的值赋予这个参数,代码如下:

978-7-111-46863-9-Chapter09-35.jpg

注意:这里使用了HttpUtility.HtmlEncode方法来处理用户的输入,这样可以防止用户的脚本注入攻击。例如:/Store/Browse?Genre=<script>window.location=’http://hacker- site.com’</script>。

现在,在浏览器中访问一下:/Store/Browse?Genre=Disco,运行效果如图9-21所示。

978-7-111-46863-9-Chapter09-36.jpg

图9-21 唱片分类浏览

下一步,处理Details这个Action,使它能够处理名为ID的整数类型参数。这次,不再在请求参数中传递这个整数,而是嵌在请求的URL地址中。例如:/Store/Details/5。

在ASP.NET MVC中,可以轻易地完成这个任务而不需要配置任何东西,ASP.NET MVC默认的路由约定会将跟在Action方法之后的部分看作名为ID的参数的值,如果Action方法有一个名为ID的参数,那么,ASP.NeT MVC就会自动将这部分作为参数传送给Action方法,需要注意的是,MVC可以帮助完成数据类型之间的转换,所以,地址的第三部分一定要可以转换为整数,代码如下:

978-7-111-46863-9-Chapter09-37.jpg

再次运行程序访问/Store/Details/5,效果如图9-22所示。

978-7-111-46863-9-Chapter09-38.jpg

图9-22 唱片详情浏览