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

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

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

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

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

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

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

 @helper Show(int count)
{
if (count == )
{
@:存在
}
else
{
@:不存在
}
} @(ViewBag.IsEnabled == ? "不存在" : "存在")
@Show() @*调用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标签输出到页面。

 //自定义函数@functions
@functions{
public IHtmlString Get(int count)
{
string result = "";
if (count == )
{
result = "不存在";
}
else
{
result = "存在";
}
return new HtmlString(result);
}
} @Get() //调用的自定义函数

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

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

UIHelper.cshtml文件代码

 @helper ShowUnit(int count)
{
if (count == )
{
@:免费
}
else
{
@count
}
} @functions {
public static IHtmlString Check(int count)
{
string result = "";
if (count == )
{
result = "fsdfsdfsdfd";
}
else
{
result = count.ToString();
}
return new HtmlString(result);
}
}
//自定义函数@functions
@functions{
public static IHtmlString Get(int count)
{
string result = "";
if (count == )
{
result = "不存在";
}
else
{
result = "存在";
}
return new HtmlString(result);
}
}

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

最新文章

  1. Apache2.4权限配置(原创帖-转载请注明出处)
  2. 协同开发中SVN的使用建议
  3. EASYUI DATAGRID 多列复选框CheckBox
  4. .NET通用基本权限系统
  5. EasilyUI的一个简单的拖拽功能
  6. 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
  7. 升级openssl到1.0.1g
  8. 使用JS控制struts的日期控件datetimepicker
  9. 高质量程序设计指南C/C++语言——内存管理
  10. DLNA_百度百科
  11. C#动态调用WCF接口
  12. iOS masonry九宫格 单行 多行布局
  13. redis简单测试用例(内存不足,可以使用redis)
  14. awk小例子_2_数值统计脚本
  15. Gradle 简记
  16. [JSON] 前后台如何通过$.ajax()传输JSON数据
  17. 使用Oracle DBLink进行数据库之间对象的访问操作
  18. Java基础知识(JAVA之IO流)
  19. 在eclipse激活maven profile配置
  20. [Umbraco] macro(宏)在umbraco中的作用

热门文章

  1. JAVA的continue用法
  2. actor concurrency
  3. TaintDroid剖析之DVM变量级污点跟踪(下篇)
  4. 获取Windows操作系统的CPU使用率以及内存使用率
  5. 介绍两个Ubuntu上的桌面小工具
  6. AngularJs之一
  7. java中集合类中Collection接口中的Set接口的常用方法熟悉
  8. Sql Server系列:自定义函数
  9. hudson部署过程
  10. OpenCascade Primitives BRep-Cone