@helper的使用

@helper的使用、前言最近翻到一篇Scott的旧文,觉得挺不错的,就试着翻译了一下,文章主要是说如何在Razor中使用@helper语法定义可复用的视图模板方法。如有疏漏,还请请各位看官指点一二~原文地址:http:

大家好,又见面了,我是你们的朋友全栈君。

 

、前言

最近翻到一篇Scott的旧文,觉得挺不错的,就试着翻译了一下,文章主要是说如何在Razor中使用@helper语法定义可复用的视图模板方法。如有疏漏,还请请各位看官指点一二~

原文地址:http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

2、正文

Asp.net MVC 3提供了一个全新的视图引擎(View-engine)叫做Razor(同时也继续提供并增强了对现有的.aspx视图引擎的支持)。Razor最大程度的减少了编写视图模板(译者注:前端页面)时需要输入的字符数和键盘敲击次数,提供了一个快速和流畅的编码体验。

与大多数模板语言不同,使用Razor你不在需要使用一些开始和关闭标记来打断你的编码(译者注:像aspx的<% %>),Razor的语法分析器能够智能的识别代码。这样的语法紧凑而简洁,输入起来轻松愉快。

你可以从我这9个月以来发表的一些文章来了解关于Razor的更多信息:

今天的文章主要是讨论一个不甚为人所知的特性:使用@helper语法定义可重用的helper方法

@helper语法让你可以轻松在视图模板中创建可重用的帮助方法,以此来封装一些负责向页面进行输出的功能。使用这项技术你将可以写出可读性更好的代码,并抽象出可重用的帮助方法。让我们来看一个最简单的例子:

首先看一个展示产品列表的简单场景:显示产品的名称和价格——如果产品没有价格,则显示“FREE”

clip_image001

可以看到上面的代码非常直白,并且Razor的语法使得HTML与服务端C#代码结合的更加自然和易懂。

只有一个地方看起来有些别扭,就是针对价格的”If else”逻辑。如果我们需要在另外一个页面显示产品的价格,就不得不再写一遍上面的判断逻辑,每一个地方都可能出现错误,导致代码难以维护且臃肿。

这种情况就需要把判断价格的逻辑抽出来形成helper方法。

让我们把价格判断逻辑封装起来,使用一个”DisplayPrice”helper方法来表示它:

clip_image001[10]

我们已经使用@helper语法定义了一个可重用的DisplayPrice方法,就好像标准C#/VB代码一样,它可以包含任意数量的参数(你也可以定义可空类型参数)。与标准C#/VB代码不同的是,你除了可以写服务端代码以外,还可以写入HTML,以及其他Razor支持的语法。

clip_image002

你可以像调用标准C#或VB代码一样调用它们

clip_image003

VS也同样会为它生成智能提示信息:

clip_image004

下面来讨论在多个视图页面共享helper方法:

在上面的例子中,我们定义了自己的helper方法,该方法与调用代码在同一个视图模板中。我们其实可以将方法定义在视图模板外部,并且让它可以被所有的视图模板所公用。

要实现这个功能,我们需要把定义helper方法的文件放在App_Code目录下。这个目录通常应该在项目根目录下。

比如我创建了一个叫做“ScottGu.cshtml”的文件,并且定义了2个方法在里面(你可以在一个文件中定义任意多个helper方法):

clip_image005

一旦我们在App层面定义了这些方法,我们就可以在应用程序的任何视图模板中使用它们。

ScottGu.cshtml模板文件将会自动编译为一个叫做ScottGu的类,并且包含2个静态方法: “DisplayPrice” 和“AnotherHelper” 。

我们可以像下面这样调用它们:

clip_image006

Visual Studio会为我们提供智能感知提示:

clip_image007

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155046.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ES6 数组方法归纳整理

    ES6 数组方法归纳整理ES6操作数组方法1.判断是否为数组 letarr=[1,2,3] console.log(Array.isArray(arr))//true console.log(Array.isArray([]))//true2.创建数组newArray()创建数组如果使用Array构造函数传入一个数值型的值,那么数组的长度length属性会被设置为该值; letitems=newArray(2); console.log(items.length);//2

    2022年6月9日
    32
  • STEAM账号被盗(绑定QQ邮箱)的找回方法以及背后操作原理解析「建议收藏」

    STEAM账号被盗(绑定QQ邮箱)的找回方法以及背后操作原理解析「建议收藏」看到这篇博客的,想必十有八九都是刚刚发现STEAM账号被盗的!针对STEAM密码被修改、绑定邮箱被修改、申诉“此客服案件已关闭”、STEAM申诉超过2天没有结果、当天打开杀毒软件警告过的高危软件后被盗号的我觉得会有用!(我是Murphyer今天是19年4月20日,从上次被盗号到现在已经半年多了,没有出现再被盗号的情况。我在这儿提供一个QQ群:866986904(目前已有270人…

    2022年7月25日
    128
  • 手机cpu控制免root_cpu利用率低但是卡

    手机cpu控制免root_cpu利用率低但是卡想不想让CPU利用率展示成一首优美的旋律,就像弹琴一样。我的意思是,你想让系统以及task的CPU利用率是多少它就是多少,一切都是由你的程序自己来调制演奏。这需要一种自指机制。哈哈,完全可以,本文来演示,或者说,你可以把本文的内容看作一个戏弄运维人员的恶作剧。运维人员经常会遇到各种CPU高的问题,然后成群结队地去排查,想让队伍更大些吗?想让事情更诡异吗?我让你查,我让你查。哈哈。事先声明,若用本文描述的手段实施恶意行为,将会受到谴责,这并不是一个真正工程师该有的行为,更有辱手艺人的探索精神。

    2025年8月24日
    3
  • WinHttp用法(WinHttp.WinHttpRequest.5.1方法,属性)

    WinHttp用法(WinHttp.WinHttpRequest.5.1方法,属性)使用WinHttpRequest伪造HTTP头信息,伪造Referer等信息由于微软封锁了XmlHttp对象,所以无法伪造部分HTTP头信息,但是WinHttp.WinHttpRequest.5.1对象,它居然用可以成功伪造所有http请求的header信息!从msdn得知,WinHttp.WinHttpRequest.5.1是msxml4.0的底层对象,也就是说XML

    2022年7月11日
    21
  • wxpython入门教程_wxPython 入门教程

    wxpython入门教程_wxPython 入门教程这篇文章是关于wxPython,但wxPython实际是两件事物的组合体:Python脚本语言和GUI功能的wxWindows库(关于wxWindows的介绍,请参阅developerWorks上的“细述wxWindows”)。wxWindows库是为了最大可移植性的C/C++库,而抽取GUI功能。所以wxWindows应用程序与生俱来地可以运行在Win…

    2022年5月21日
    23
  • 几个跨平台移动App开发方案框架比较

    几个跨平台移动App开发方案框架比较目录总括几个开发框架的比较PhoneGapCordovaIonicAppCanDcloudAPICloudReactNativeXamarinFlutterWeX5总结ReactNative、Weex等有什么不同?总括根据一些老博客里面的内容,现在整理一下目前流行的跨平台移动App开发技术的特点,并将几个不同的开发平台框架进行比较说明,仅供大家参考。每个开发框架几乎都包含以下特性:使用HTML5+CSS+JavaScrip

    2022年5月31日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号