asp.net MVC 帮助助手和函数( @helper @functions)
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文件夹下的文件最终会被编译成类。
总结:我们总结一下要实现根据不同情况进行输出有多少种实现方式,当然我能想到的不会完全。
- 通过helper进行全局的设置,让所有需要判断的页面都调用这个helper方法。
- 在后台代码判断,然后输出到前台View。
- 通过Html.Action()或Html.Partial()来获取,当然如果简单的还是采用helper,复杂的可以采用这种方式。
- 通过自定义函数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的方式来实现。
原文地址:http://www.cnblogs.com/jiagoushi/p/3904995.html
asp.net MVC 帮助助手和函数( @helper @functions)的更多相关文章
- ASP.NET MVC 4 (六) 帮助函数
帮助函数封装一些代码,方便我们在应用程序中重用,MVC内建很多帮助函数,可以很方便的生成HTML标记.首先列出后面示例中用到的数据模型类定义: namespace HelperMethods.Mode ...
- [ASP.NET MVC 小牛之路]13 - Helper Method
我们平时编程写一些辅助类的时候习惯用“XxxHelper”来命名.同样,在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 ...
- ASP.NET MVC 4 (七) 模板帮助函数
和普通HTML帮助函数不同,模板帮助函数不需要指定所用的HTML类型,MVC会推断选择合适的HTML元素,这让我们有更多的灵活性. 使用模板帮助函数 我们使用<ASP.NET MVC 4 (六) ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...
- [ASP.NET MVC 小牛之路]16 - Model 验证
上一篇博文 [ASP.NET MVC 小牛之路]15 - Model Binding 中讲了MVC在Model Binding过程中如何根据用户提交HTTP请求数据创建Model对象.在实际的项目中, ...
- ASP.NET MVC API 路由生成规则
我们都知道调用ASP.NET MVC的某些API函数(诸如:Url.Action.RedirectToAction等)可以生成URL,ASP.NET MVC会根据调用API函数时传入的参数去匹配系统定 ...
- ASP.NET MVC 教程汇总
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- 全网最全ASP.NET MVC 教程汇总
全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...
随机推荐
- 未来WEB程序员
作为一名程序员,如果你想在这个领域内继续向前进步或者在当前的经济形势下保持不被炒鱿鱼,那么你就决不应当自满自足,你需要继续学习.近日,著名IT评论员Justin James在他的博客中列出了未来五年程 ...
- 实现:编辑短信,按power键锁屏后,再点亮屏幕,进入的还是编辑短信界面,按返回键才会进入解锁界面。
描述:在编辑短信界面按电源键锁屏后,重新按电源键点亮屏幕,并没有进入到锁屏界面而是在编辑短信界面,此时短信界面悬浮与锁屏界面之上,这时按返回键关闭编辑短信界面,回到锁屏界面,是如何实现的呢,只需要在需 ...
- svn出现权限不足时的解决方法
将所有svn目录设置为当前用户所有....即可 sudo chown will:will . -R
- Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用
Sheet can not be presented because the view is not in a window,顺便在stackoverflow上找了答案,希望能给大家带来帮助,在此感谢 ...
- 1、网页制作Dreamweaver(界面、基本操作、锚点、表格)
界面 网页的界面html由两部分组成:<head>和<body>,<title>放在<head>中 1.以下是<head>部分的解释: &l ...
- 解决CSS小于12px的文字在谷歌浏览器显示问题
做前端设计的人经常要接触CSS方面的问题,估计有不少人会遇到Chrome谷歌浏览器中CSS设置字体小于12px显示不正常,强创网络在做magento模板过程中就遇到了,起初以为是自己写的CSS的问题, ...
- LeetCode OJ String to Integer (atoi) 字符串转数字
#include <iostream> #include <assert.h> using namespace std; int ato(const char *str) { ...
- CI中的事物
$this->db->trans_begin(), 在使用时,设置了 mysql AUTOCOMMIT = 0,表示禁止自动提交, 在未提交和回滚之前,不会提交sql查询. AUTOCO ...
- 《JavaScript模式》第1章 简介
@by Ruth92(转载请注明出处) 第1章 简介 模式 模式:是指一个通用问题的解决方案. 设计模式 编码模式 反模式:常见的.引发问题比解决的问题更多的一种方法. JavaScript 基本概念 ...
- 使用StringBuilder更高效的处理字符串
前言 本文介绍一个java中处理字符串的技巧 - 使用StringBuilder提高字符串处理效率. StringBuilder 当程序要频繁的进行字符串拼接的时候,直接使用String效率会比较低. ...