from:http://www.cnblogs.com/jiagoushi/p/3904995.html

asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率。但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们的开发效率,减少开发bug的出现。

Razor 采用的是@ 尾巴符号,正是这个符号成就了Mvc开发效率的提升。下面了解一下和@相关的两个可以重用的helper、functions。

作为现代化的程序员,我们尽可能的遵守一个原则.不要重复你自己。所以能够重构的代码我们都会合并,但是这是对于后台代码C#来说的,对于在View层 也可以进行一些简单的业务逻辑,当然View层可以进行复杂的业务逻辑判断,但是前辈说复杂的业务逻辑是Model或Controller的工作,View层的任务就是展示,业务逻辑应当是越少越好。

在View层进行的一些重构有哪些呢?其中一个就是@helper  自定义片段。

比如说我们要输出一个数字,如果为0的话就输出不存在,如果为其他数字就输出存在,当然这个在强大的Razor语法下很容易的就可以搞定。

1 @(ViewBag.IsEnabled == "0" ? "不存在" : "存在")

但是如果当前页面有很多这样的相同逻辑的判断会怎么样呢?聪明的程序员肯定知道不能重复你自己的原则,所以我们就要进行重构,但是在View层怎么进行重构呢?使用@helper可以解决这个问题。

 1 @helper Show(int count)
2 {
3 if (count == 0)
4 {
5 @:存在
6 }
7 else
8 {
9 @:不存在
10 }
11 }
12
13 @(ViewBag.IsEnabled == 0 ? "不存在" : "存在")
14 @Show(0) @*调用helper*@

这样我们在当前页面多个位置进行调用来输出,如果要修改可以修改一部分,而不至于全部都要修改。

还有就要说了,我要在其他页面也使用这个helper怎么办呢?当然办法还是有的,在app_code文件夹下添加一个视图文件(假定为UIHelper.cshtml),将helper代码复制,然后在需要调用的View页面通过@UIHelper.Show(0)  来调用。因为app_code文件夹下的文件最终会被编译成类。

总结:我们总结一下要实现根据不同情况进行输出有多少种实现方式,当然我能想到的不会完全。

  1. 通过helper进行全局的设置,让所有需要判断的页面都调用这个helper方法。
  2. 在后台代码判断,然后输出到前台View。
  3. 通过Html.Action()或Html.Partial()来获取,当然如果简单的还是采用helper,复杂的可以采用这种方式。
  4. 通过自定义函数Functions来实现。

自定义函数@functions  ,自定义函数式采用c#的语法来实现的代码复用,只不过这个函数可以将html标签输出到页面。

 1 //自定义函数@functions
2 @functions{
3 public IHtmlString Get(int count)
4 {
5 string result = "";
6 if (count == 0)
7 {
8 result = "不存在";
9 }
10 else
11 {
12 result = "存在";
13 }
14 return new HtmlString(result);
15 }
16 }
17
18
19 @Get(0) //调用的自定义函数

请注意,@functions 对应的是Razor的代码段,需要添加{},并且functions内部是正规的c#方法。

如果要在多个页面同时使用这个functions,可以将这个方法移植到app_code中,假定文件名为UIHelper.cshtml。并且里面的方法必须定义为静态的。这个很好理解,UIHelper相当于类名,而其中的functions就相当于方法,如果要通过类名.方法名来进行调用,则必须将方法定义成静态的。

UIHelper.cshtml文件代码

 1 @helper ShowUnit(int count)
2 {
3 if (count == 0)
4 {
5 @:免费
6 }
7 else
8 {
9 @count
10 }
11 }
12
13 @functions {
14 public static IHtmlString Check(int count)
15 {
16 string result = "";
17 if (count == 0)
18 {
19 result = "fsdfsdfsdfd";
20 }
21 else
22 {
23 result = count.ToString();
24 }
25 return new HtmlString(result);
26 }
27 }
28 //自定义函数@functions
29 @functions{
30 public static IHtmlString Get(int count)
31 {
32 string result = "";
33 if (count == 0)
34 {
35 result = "不存在";
36 }
37 else
38 {
39 result = "存在";
40 }
41 return new HtmlString(result);
42 }
43 }

总结:helper针对的是直接输出html内容并且具有简单的逻辑的情况,并且helper没有任何返回值,而functions自定义函数则要强大很多,如果functions需要返回html内容,那么返回值是IHtmlString类型,如果不需要返回值,则可以设置为void,但是如果没有返回值也就失去了定义function的意义,所以一般返回值均为IHtmlString。对于View层的重构,我们可以采用helper和自定义函数functions的方式来实现。

razor自定义函数 @helper 和@functions小结的更多相关文章

  1. MSSQL 自定义函数详解

    自定义函数分为:标量值函数或表值函数 如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数.可以使用多条 Transact-SQL 语句定义标量值函数. 如果 RETURNS 子句指定 ...

  2. asp.net MVC helper 和自定义函数@functions小结

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  3. asp.net MVC 自定义@helper 和自定义函数@functions小结

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  4. [转]asp.net MVC helper 和自定义函数@functions小结

    本文转自:http://www.cnblogs.com/jiagoushi/p/3904995.html asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的 ...

  5. asp.net MVC 帮助助手和函数( @helper @functions)

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  6. Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions)

    Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Mysql5.7自定义函数递归报错1424 Recursive stored functions and triggers are not allowed

    示例: DELIMITER $$CREATE FUNCTION test(countnum INT)RETURNS INT DETERMINISTICBEGINDECLARE tempnum INT ...

  9. PHP中call user func()和call_user_func_array()调用自定义函数小结

    call_user_func() 和 call_user_func_array(),通过传入字符串函数,可以调用自定义函数,并且支持引用,都允许用户调用自定义函数并传入一定的参数: 1.mixed c ...

随机推荐

  1. 【转】使用JMeter 完成常用的压力测试(三)

    使用JMeter 完成常用的压力测试 发布时间: 2008-9-27 15:33    作者: 未知    来源: 网络转载 字体:  小  中  大  | 上一篇 下一篇 | 打印  | 我要投稿 ...

  2. 【转】使用JMeter 完成常用的压力测试(一)

    本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. 讲到测试, ...

  3. PHP 字符串 加*

    PHP字符串加* 思路: 获取第一个字符或文字 获取最后一个字符或文字 一头一尾,中间加* 尝试用substr方法,发现对中文的支持有问题. 后来发现mb_substr很好的解决了这个问题. < ...

  4. RPC框架简易实现

           RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...

  5. WCF服务端返回:(413) Request Entity Too Large

    出现这个原因我们应该都能猜测到,文件传出过大,超出了WCF默认范围,那么我们需要进行修改. 服务端和客户端都需要修改. 第一.客户端: <system.serviceModel> < ...

  6. Py修行路 python基础 (二十三)模块与包

    一.模块 1)定义: 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2)为何要用模块: 退出python解释器然后重新进入,那之前定义的函数或者变量都将丢失,因 ...

  7. ulimit open files linux打开文件数设置验证

    #include <stdio.h> #include <sys/types.h> #include <fcntl.h> #include <stdlib.h ...

  8. c作图-正弦函数图像

    #include<graphics.h>#include<math.h>int main(){    int gmode,gdriver=DETECT; double x1,y ...

  9. 安卓 textview 换行 不满就换了

    public static String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c. ...

  10. How To Create SharePoint 2010 Site Collection In Its Own DB

    在SharePoint 2010中可以使用Management Shell 为新建的Site Collection 创建自己的DB. 在 Shell中执行如下命令: 1. $w = get-spweb ...