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文件夹下的文件最终会被编译成类。

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

  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的方式来实现。

时间: 2024-10-09 08:55:41

asp.net MVC helper 和自定义函数@functions小结的相关文章

asp.net mvc 简易通用自定义Pager实现分页

asp.net mvc 简易通用自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 HtmlHelper 的 Pager 扩展方法和一个 PagedListModel<T> 分页数据模型. PagerModel 分页模型 PagerModel 用来保存分页信息,代码实现如下: 1 /// <summary> 2 /// PagerModel 分页模型 3 ///

ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttribute应用到Model的类型或者属性上即可.对于自定义验证,我们也只需要定义相应的Validation 就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC中实现自定义验证的基本步骤.[源代码从这里下载] 一.AgeRangeAttr

ASP.NET MVC 如何使用自定义过滤器(筛选器)

原文:ASP.NET MVC 如何使用自定义过滤器(筛选器) 继承*****Attribute(筛选器三种具体类)-->重写方法-->标记在控制器 或者 方法上面 [类名(类属性 = 值)]还有[AllowAnonymous]允许匿名访问(免授权) 原文地址:https://www.cnblogs.com/lonelyxmas/p/10597463.html

ASP.NET MVC 4 (六) 帮助函数

帮助函数封装一些代码,方便我们在应用程序中重用,MVC内建很多帮助函数,可以很方便的生成HTML标记.首先列出后面示例中用到的数据模型类定义: namespace HelperMethods.Models { public partial class Person { public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public

在 ASP.NET MVC 中创建自定义 HtmlHelper

在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些像WebForm中的控件,只需传入一些参数即可生成相应的HTML代码.本文将介绍创建HtmlHelper的方法. Html.Textbox方法的返回值是MvcHtmlString,它生成了一些HTML代码.创建HtmlHelper,就像在生成HTML代码.下面以一个带有简要描述功能的链接HtmlHe

ASP.NET MVC ValidationAttribute 服务器端自定义验证

自定义服务端验证要继承自ValidationAttribute,并重写IsValid虚方法来自定义自己的验证规则,ValidationAttribute源码如下: 1 public abstract class ValidationAttribute : Attribute 2 { 3 //验证失败提示消息 4 public virtual string FormatErrorMessage(string name); 5 6 //自定义验证一 7 protected virtual Valid

razor自定义函数 @helper 和@functions小结

from:http://www.cnblogs.com/jiagoushi/p/3904995.html asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们的开发效率,减少开发bug的出现. Razor 采用的是@ 尾巴符号,正是这个符号成就了Mvc开发效率的提升.下面了解一下和@相关的两个可以重用的helper.functions. 作为现代化的

ASP.NET MVC 4 (七) 模板帮助函数

和普通HTML帮助函数不同,模板帮助函数不需要指定所用的HTML类型,MVC会推断选择合适的HTML元素,这让我们有更多的灵活性. 使用模板帮助函数 我们使用<ASP.NET MVC 4 (六) 帮助函数>中的数据模型和控制器继续后面的例子,使用模板帮助函数后改写编辑输入的视图: @model HelperMethods.Models.Person @{ ViewBag.Title = "CreatePerson"; } <h2>CreatePerson<

【MVC】自定义ASP.NET MVC Html辅助方法

在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么,我们就可以通过自己定义一个Html扩展方法来达到这个目的. 比如,到目前为止,Html扩展方法中没有关于<input type="file" />这类标签的辅助方法,那么我们就可以自已实现一个.本文以实现<input type="file" />