ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外)。当编写一个视图模板时,Razor将所需的字符和击键数减少到最小,并保证一个快速、通畅的编码工作流。

  与大部分模板的语法不同,在Razor的帮助下,您不需要中断代码编写,仅仅为了在HTML中标注服务器端代码块的开始和结束。代码分析器足够聪明,它能够从你的代码里推断出是否为服务器端代码。这种更加简洁、富有表现力的语法更加干净,输入也更快速,有趣。

  今天的博文涵盖了Razor的一项很多人都不知道的功能——利用@helper语法定义可重用的帮助器方法。

  简单的 @helper 方法应用场景

  Razor中的@helper语法让您能够轻松创建可重用的帮助器方法,此方法可以在您的视图模板中封装输出功能。他们使代码能更好地重用,也使代码更具有可读性。让我们看一个超级简单的应用场景,它展示了@helper语法是怎样被使用的。

  在我们定义@helper方法之前的代码

  让我们看一个简单的产品列表应用场景。在此场景中,我们列出产品明细并输出产品的价格或是单词“免费!”——如果这个产品不花费任何成本的话:

  以上代码非常直截了当,而且Razor的语法使得在HTML里能简单地集成服务器端C#代码。

  然而,一个有点混乱的地方是价格的if/else逻辑。我们可能在站点的其他位置输出价格(或者在同一页面上),而复制以上逻辑很容易出错且难以维护。类似的应用场景是使用@helper语法提取和重构成为帮助器方法的首选考虑。

  使用@helper语法重构以上样例

  让我们提取价格输出逻辑,并将其封装在一个我们将命名为“DisplayPrice”的帮助器方法内。我们可以通过重写以下代码样例来实现此操作:

  我们已经使用上述@helper语法来定义名为“DisplayPrice”的可重用帮助器方法。就像标准C#/VB方法一样,它可以包含任意数量的参数(您也可以定义参数为空或可选参数)。不过,与标准C#/VB方法不同的是,@helper方法可以同时包含内容和代码并支持其中的完整Razor语法——这使得定义和封装呈现/格式化帮助器方法变得非常简单。

  您可以像调用一个标准的C#或VB方法一样,调用@helper方法:

  当调用该方法时,Visual Studio会提供智能感知代码:

  在多视图模式中重用@helper

  在上面的实例中,我们在相同的视图模板中将@helper方法定义为调用它的代码。或者,我们可以将@helper方法定义在视图模板外,并保证其在项目的所有视图模板中可重复使用。

  您可以在.cshtml/.vbhtml保存我们的@helper方法,并把这个文件放在项目根目录下创建的\App_Code目录下例如,我在\App_Code文件夹中创建了一个“ScottGu.cshtml”文件,并且在文件中定义了2个单独的帮助器方法(在每个文件中您可以有任意数量的帮助器方法):

  一旦我们的帮助器定义在应用程序级别,我们就可以在应用程序的任何视图模板中使用它们。

  在上面的\App_Code文件夹中的ScottGu.cshtml会逻辑编译为一个称为“ScottGu”的类。这个类中包含了“DisplayPrice” 和 “AnotherHelper”的静态成员。我们可以使用以下代码重写前面的示例来调用它:

  当像如下方法调用应用程序级别帮助器时,Visual Studio将会提供智能感知代码:

  5月15日更新:有一些人指出的一个问题是,当一个@helper保存在\app_code目录中时,默认情况下您不能访问其中的ASP.NET MVC Html帮助器方法。(例如Html.ActionLink(), Html.TextBox()等等)。而当它们定义在与视图相同的文件夹中,您是可以访问内置HTML帮助器方法的。当帮助器位于\app_code目录下时,确实当下是不支持内置HTML帮助器方法的访问的——我们将在下次发布中添加此功能。Paul Stovall有一个很好的帮助器类,您可以同时访问和使用它和您在\app_code目录下定义的@helper方法中的内置Html方法。请从这里了解更多关于如何使用的信息。

  总结

  Razor的@helper语法提供了一种简便的方法来将呈现功能封装到帮助方法中去。您可以在单个视图模板或整个项目的所有视图模板中重用它。

  您可以使用此功能来编写更加干净、更易维护的代码。

转载于:https://www.cnblogs.com/EasyLive2006/archive/2011/09/24/2189645.html

ASP.NET MVC 3和Razor中的@helper 语法相关推荐

  1. mvc if 显示html,asp.net mvc - 在MVC3 Razor中,如何在动作中获取渲染视图的html?

    @Chev上面接受的答案很好,但我想渲染特定操作的结果,而不仅仅是特定的视图. 此外,我需要能够将参数传递给该操作,而不是依赖于注入模型. 所以我想出了我自己的方法,我把它放在我的控制器的基类中(让它 ...

  2. Asp.net MVC 1.0 RTM中实现文件上传

    Asp.net MVC 1.0 RTM中实现文件上传 在我们开始之前,你需要知道一个form以post方式上传文件的方式,你将要增加一个特别的enctype attribute到form标签上,为了这 ...

  3. Asp.net MVC 4新项目中创建area的后续操作

    Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具 ...

  4. asp.net mvc webform和razor的page基类区别

    接触过asp.net mvc的都知道,在传统的webform的模式下,page页面的基类是这样声明的: <%@ Page Language="C#" MasterPageFi ...

  5. mvc html的扩展,关于asp.net mvc 3:Razor无法正确呈现HtmlHelper扩展方法

    我的html helper类中有一个Extension方法来呈现自动完成功能. 这在VS2008和VS2010中的aspx视图引擎中可以很好地工作. Autocomplete类具有一个重载的ToStr ...

  6. asp.net mvc jquery ajax post,使用ASP.NET MVC在JS文件中设置jQuery的ajax url

    这样可以充分利用MVC路由,以便充分利用MVC框架. 灵感来自于stusmith的答案. 在这里我有一个ActionController的动作javascript为这个URL的动作: /applica ...

  7. asp.net mvc 如何在View中获取Url参数的值

    如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3    这时想 ...

  8. Asp.Net MVC 4 Web API 中的安全认证-使用OAuth

    各种语言实现的oauth认证: http://oauth.net/code/ 上一篇文章介绍了如何使用基本的http认证来实现asp.net web api的跨平台安全认证. 这里说明一个如何使用oa ...

  9. 关于ASP.NET MVC的一些工作中遇到的问题

    今天我的项目出现了一个问题,为什么我要记录这篇博客呢,因为,我昨天刚刚实现的功能然后没问题,今天给图片加水印的时候突然发现 整个项目所有图片都不能上传了. 然后我跟个傻叉似的一直在另外一个类里面打断点 ...

  10. ASP.NET MVC @helper使用说明

    简单的 @helper 方法应用场景 Razor中的@helper语法让您能够轻松创建可重用的方法,此方法可以在您的视图模板中封装输出功能.他们使代码能更好地重用,也使代码更具有可读性. 在我们定义@ ...

最新文章

  1. awk中的NR和FNR
  2. 控制iOS的导航栏和状态栏的样式
  3. 华为机试HJ14:字符串排序
  4. Energetically Consistent Invertible Elasticity
  5. 《Velocity 模板使用指南》中文版[转]
  6. pe我的手机服务器存档文件,我的世界手机版怎么导出存档 pe版怎么把存档给别人用...
  7. 骁龙660_骁龙660卖到4000元!这款手机哪里来的自信?
  8. Oracle数据库的安装
  9. java xml注释多行_如何在XML中注释单行?
  10. 软件开发版本号命名规则
  11. vue php跨域,Vue+php处理跨域问题
  12. IDEA2019安装及PJ
  13. 计算机英语单词大全txt,计算机英语词汇大全.txt
  14. 为什么前端工程师的工资越来越高了?
  15. 十大热门经典历史小说,大有希望获得第四届橙瓜网络文学奖
  16. python读取xlsm文件_如何从* .xlsm中提取工作表并将其保存为Python中的* .csv?
  17. HTML--图片的插入
  18. 学习笔记:【案例】中医证型关联规则挖掘
  19. 霍尔传感器的工作原理
  20. Git切换项目当前登录账号

热门文章

  1. leetcode771题
  2. c#获取本地ip地址网关子网掩码_C#设置本地网络如DNS、网关、子网掩码、IP等等...
  3. 自己配置外接屏幕和驱动,最终通过hdmi连接
  4. hadoop在windows上的环境配置及HDFS API编程示范
  5. 计算机二级的注册证件号码,如何在Excel中输入以0开头的证件号码
  6. 阿里巴巴商学院计算机考研,2017年杭州师范大学阿里巴巴商学院826计算机基础之C程序设计考研仿真模拟题...
  7. arraylist 初始化_ArrayList 和 LinkedList 哪个更占空间?
  8. python训练营 朋友圈点赞收费吗_微信朋友圈点赞,是不是扣话费?有人给
  9. java8 metaspacesize_java-8 – Java8 MetaspaceSize标志不起作用
  10. 实战:基于服务端开发和前后端分离开发区别