首页 > web开发 > .NET > 正文
2.3.3 控制器操作中的参数
2015-04-21 14:10:52     我来说两句      
收藏    我要投稿

前面的例子写出的是常量字符串。下一步就是让它们通过响应URL传进来的参数动态地执行操作。按以下步骤来实现:

(1) 把Browse操作方法修改为,检索从URL传过来的查询字符串值。可以通过在操作方法中添加一个string类型的“genre”参数来实现这个功能。然后,当这个方法被调用时,ASP.NET MVC会自动将名为“genre”的查询字符串或表单提交参数传递给Browse操作方法。

 

//
// GET: /Store/Browse?genre=?Disco
public string Browse(string genre)
{
string message =
HttpUtility.HtmlEncode("Store.Browse, Genre = " + genre);
return message;
}

HTML编码的用户输入

利用方法HttpUtility.HtmlEncode来预处理用户输入。这样就能阻止用户用链接向视图中注入JavaScript代码或HTML标记,比如//Store/Browse?Genre=<script>window.location= 'http://hacker.example.com'</script>。

(2) 浏览到/Store/Browse?Genre=Disco,结果如图2-14所示。


 

这表明控制器操作可将查询字符串作为其操作方法的参数来接收。

(3) 修改Details操作方法,使其读取和显示一个名为ID的输入参数。这里不像前面的方法那样把ID值作为一个查询字符串参数,而是将ID值直接嵌入到URL中,如 /Store/Details/5。

ASP.NET MVC在不需要任何额外配置的情况下可以很容易地做到这一点。ASP.NET MVC的默认路由约定,就是将操作方法名称后面URL的这个片段作为一个参数,该参数的名称为ID。如果操作方法中有名为ID的参数,那么ASP.NET MVC会自动将这个URL片段作为参数传递过来。

//
// GET: /Store/Details/5
public string Details(int id)
{
string message = "Store.Details, ID = " + id;

return message;
}


像前面示例演示的那样,控制器操作感觉就像是Web浏览器直接调用控制器类中的方法。类、方法和参数都被具体化为URL中的特定路径片段或查询字符串,结果就是一个返回给浏览器的字符串。这就进行了极大的简化,而忽略了下面这些细节:

●路由将URL映射到操作的方式。

●将视图作为模板生成返回给浏览器的字符串(通常是HTML格式)。

●操作很少返回原始的字符串;它通常返回合适的ActionResult来处理像HTTP状态码和调用视图模板系统这样的事项。

控制器提供了很多自定义和扩展的功能,但是我们很少能用到这些内容。在一般应用中,控制器通过URL被调用,然后执行自定义的代码并返回一个视图。先记住这些内容,后面我们会详述关于控制器如何定义、调用和扩展的底层细节,这些底层内容以及其他高级主题将在第15章中进行讲解。现在已经学习了足够的控制器知识,可以与视图结合起来使用了,第3章中会对这部分内容进行详细介绍。


 



点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.3.2 创建第一个控制器
下一篇:2.4 小结
相关文章
图文推荐
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站