请注明转载地址:http://www.cnblogs.com/arhat

在前一章中,我们讲述了View如何从Action中获得数据,并显示出来,但随着需求的变化,我们可能要对View中显示的数据作出一些简单的改变,那么如果放到ASP.NET中,我们都知道,只需要在aspx.cs中写一个共有的方法,然后则页面通过<%%>来调用,但是在ASP.NET MVC中是不能这样干的,那么如何解决这样的问题呢?本章就这个问题学习两个新的Razor语法@helper和@functions。
在上一章的最后,我们展示了4条记录,但是这个4条记录都是用div来显示,今天我们该写一下,使用表格来展示数据,更改内容如下:

@using  Com.ArHat.Web.Models;

@{int i =1;}

<table border="1px" cellpadding="2px" cellspacing="0px" width="500px" style="border-collapse:collapse">

<tr>

<th width="20px">ID</th>

<th>和尚</th>

<th width="50px">年龄</th>

<th width="100px">操作</th>

</tr>

@foreach (M_Person person in ViewBag.Data)

    { 

<tr>

<td align="center">@(i++)</td>

<td align="center">@person.Name</td>

<td align="center">@person.Age</td>

<td align="center">删除||编辑</td>

</tr>

    }

</table>

那么现在我们有一个需求,要求如果年龄大于90,则要显示为黄色,其他的不便,那么该怎么办呢?我们可以采用这样的方法:

<td align="center">

@{if (person.Age > 90)

                                  {

<font color="red">@person.Age</font>

                                  }

else

                                  { 

@person.Age

                                  }

}

</td>

预览一下就可以看到预想的效果了:

但是,如果这样写的话,首先是代码看起来不争气,二是不能重复利用,这就违反了面向对象的原则,那么可不可以把这种功能给封装起来呢?有的,下面我们先看一下Razor提供给我们的@helper语法。

@helper语法,允许我们能够轻松创建可重用的帮助器方法。他们使代码能更好地重用,也使代码更具有可读性。好了,我们更改一下代码:

@using  Com.ArHat.Web.Models;

@{int i = 1;}

@helper ChangeColor(int age)

{

if(age>90)

    {

<font color="red">@age</font>

    }else

    {

@age

    }    

}

<table border="1px" cellpadding="2px" cellspacing="0px" width="500px" style="border-collapse:collapse">

<tr>

<th width="20px">ID</th>

<th>和尚</th>

<th width="50px">年龄</th>

<th width="100px">操作</th>

</tr>

@foreach (M_Person person in ViewBag.Data)

    { 

<tr>

<td align="center">@(i++)</td>

<td align="center">@person.Name</td>

<td align="center">@ChangeColor(person.Age)</td>

<td align="center">删除||编辑</td>

</tr>

    }

</table>

下面我们来分析一下@heler语法:

@helper ChangeColor(int age)

{

if(age>)

    {

<font color="red">@age</font>

    }else

    {

@age

    }    

}

@helper后面的ChagenColor是函数名,其实和定义函数没什么区别,就是不能猛有返回值,而函数中只是输出语句“<font color="red">@age</font>”和”@age”。但是,如果我们每个View中都写这个函数的话,是不是没有代码重用呢?所以Razor可以用一个文件专门的存放这样的函数。我们在项目创建一个App_Code文件夹,在这个文件夹中创建一个布局页:

我们给这个文件七个名字为”UIHelper”。然后把上面的@helper代码复制到这个文件中。

UIHelper.cshtml代码:

@helper ChangeColor(int age)

{

if(age>90)

    {

<font color="red">@age</font>

    }else

    {

@age

    }    

}

然后我们在所有的view中都可以使用这个函数了,我们更改一下Index.cshtml文件。

@using  Com.ArHat.Web.Models;

@{int i = 1;}

<table border="1px" cellpadding="2px" cellspacing="0px" width="500px" style="border-collapse:collapse">

<tr>

<th width="20px">ID</th>

<th>和尚</th>

<th width="50px">年龄</th>

<th width="100px">操作</th>

</tr>

@foreach (M_Person person in ViewBag.Data)

    { 

<tr>

<td align="center">@(i++)</td>

<td align="center">@person.Name</td>

<td align="center">@UIHelper.ChangeColor(person.Age)</td>

<td align="center">删除||编辑</td>

</tr>

    }

</table>

我们会发现,在View中使用这个方法的时候需要加上@UIHelper前缀。可以认为@UIHelper就是一个类,而ChangeColor是个这个类中的一个静态方法。

当然了,我们知道了@helper定义的方法只能是输出不能有返回值,那么有没有一种功能可以类似函数呢?答案就是@functions。好我们继续更改一下Index.cshtml文件。

@using  Com.ArHat.Web.Models;

@{int i = 1;}

@functions{

public IHtmlString ChangeColor(int age)

    {

if(age>90)

        {

return new HtmlString("<font color='red'>"+age+"</font>");

        }else

        {

return new HtmlString(age + "");

        }

    }

}

<table border="1px" cellpadding="2px" cellspacing="0px" width="500px" style="border-collapse:collapse">

<tr>

<th width="20px">ID</th>

<th>和尚</th>

<th width="50px">年龄</th>

<th width="100px">操作</th>

</tr>

@foreach (M_Person person in ViewBag.Data)

    { 

<tr>

<td align="center">@(i++)</td>

<td align="center">@person.Name</td>

<td align="center">@ChangeColor(person.Age)</td>

<td align="center">删除||编辑</td>

</tr>

    }

</table>

我们会发现,我们在Index.cshtml中定义了一个@funtions代码块,在代码块中可以定义方法,就和普通的类一样。但是注意的地方时函数的返回值,在@functions中定义的方法,一般的返回值类型都是IHtmlString类型这个类型可以认为是String类型的一个变种,但依然是String.所以我们在返回值的时候使用了IHtmlString的一个实现类HtmlString。

当然,我们和@helper一样,也可以吧@functions放到一个文件中,方便代码的重复利用。同样,我们在App_Code文件中创建一个布局文件,名字为”UIFunctions”。

代码如下:

@functions{

public static IHtmlString ChangeColor(int age)

    {

if(age>)

        {

return new HtmlString("<font color='red'>"+age+"</font>");

        }else

        {

return new HtmlString(age + "");

        }

    }

}

但是要注意的地方时,如果把@functions移动到单独的文件中,起方法必须是static类型的。其实猜猜就应该知道,这个是一个扩展方法。
在View中,我们可以通过@UIFunctions来调用这个函数,而@UIFunctions可以认为是一个类名。

@using  Com.ArHat.Web.Models;

@{int i = 1;}

<table border="1px" cellpadding="2px" cellspacing="0px" width="500px" style="border-collapse:collapse">

<tr>

<th width="20px">ID</th>

<th>和尚</th>

<th width="50px">年龄</th>

<th width="100px">操作</th>

</tr>

@foreach (M_Person person in ViewBag.Data)

    { 

<tr>

<td align="center">@(i++)</td>

<td align="center">@person.Name</td>

<td align="center">@UIFunctions.ChangeColor(person.Age)</td>

<td align="center">删除||编辑</td>

</tr>

    }

</table>

好了,通过这个练习,我们知道了@helper和@funtions的用法,至于用哪个都无所谓的。到本章,基本的Razor语法已经结束了,如果后续章节中我们用到其他的语法另说把!所谓不可能面面俱到啊!
告诉大家一个不好的消息,老魏在写篇文章的时候,不小心把手指头弄伤了,很是疼啊!

一步步学习ASP.NET MVC3 (6)——@helper,@functions的更多相关文章

  1. 一步步学习ASP.NET MVC3 章节总结

    请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...

  2. 一步步学习ASP.NET MVC3 (1)——基础知识

    请注明转载地址:http://www.cnblogs.com/arhat 首先在这里我想声明一下,这个ASP.NET MVC3系列是我在授课过程中的一些经验,有什么不对的地方,请大家指出,我们共同的学 ...

  3. 一步步学习ASP.NET MVC3 (3)——Razor(1)

    请注明转载地址:http://www.cnblogs.com/arhat 首先这个<一步步学习ASP.NET MVC3>前段时间有些忙,没有顾得上写文章,昨天呢写了3个和ASP.NET的相 ...

  4. 一步步学习ASP.NET MVC3 (12)——FileResult

    请注明转载地址:http://www.cnblogs.com/arhat 忙了两天,本来老魏昨天就应该写出新的文章,但是由于昨天雨夹雪而且加上昨天晚上加了班,到家都没饭吃了,一看时间都9点了,什么饭店 ...

  5. 一步步学习ASP.NET MVC3 (2)——入门程序

    请注明转载地址:http://www.cnblogs.com/arhat 在上一节中,我们只是简单的介绍了什么是MVC及MVC的运行原理.而本节呢,主要来实现下一ASP.NET MVC3的开发流程,并 ...

  6. 一步步学习ASP.NET MVC3 (14)——Route路由

    请注明转载地址:http://www.cnblogs.com/arhat 由于今天是星期六,所以多写几篇,感觉前几天的忙碌没有及时发布文章,趁着周末老魏尽力的多写几篇文章.因为本系列基本上快结束了,所 ...

  7. 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...

  8. 一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult

    请注明转载地址:http://www.cnblogs.com/arhat 前面几章我们讲解的都是关于View方面的知识,虽然还有很多关于View的知识没有讲,但是没关系,我们在后面使用到的时候在讲解, ...

  9. 一步步学习ASP.NET MVC3 (13)——HTML辅助方法

    请注明转载地址:http://www.cnblogs.com/arhat 今天老魏是在十分郁闷,我的一个U盘丢了,心疼里面的资料啊,全部是老魏辛辛苦苦积攒的Linux资料,太心疼,到现在心情还不是很爽 ...

随机推荐

  1. Android 开发中的屏幕适配技术详解

    本文主要介绍Android开发中比较头疼繁琐的一个问题-屏幕适配问题.主要从适配原因.基本核心概念.适配方法等方面介详细 介绍从而是的深入或者进一步对Android屏幕适配技术的掌握和理解. 真题园网 ...

  2. 设置N秒后执行某个方法或函数

    设置N秒后执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了. 5秒后执行pushSecondController这个函数 [self p ...

  3. LVS配置与安装

    IP和主机准备: 准备VIP :20.20.20.1 lvs主机 :172.24.22.70 HA主机:172.24.22.4 包准备:ipvsadm-1.24.tar.gz 1.安装前配置包  2. ...

  4. 业界最有价值的 ASP.NET 博文汇总

    ASP.NET凭借它丰富的控件,强大的适应性及良好的封装性,成为业界开发的一门巨匠,它大大缩短了网站开发的时间,降低开发成本.并且可以运行在Web应用软件开发者的全部平台上.本电子书汇集了业界最有价值 ...

  5. PHP之ThinkPHP模板标签操作

    Action    : $User=M("user");     $list=$User->select();     $this->assign("list ...

  6. JDBC入门try/catch型

    package com.itheima.domain; import java.sql.Connection; import java.sql.DriverManager; import java.s ...

  7. Cordova+angularjs+ionic+vs2015开发(二)

    欢迎加群学习:457351423 这里有4000多部学习视频,涵盖各种技术,有需要的欢迎进群学习! 一.创建空白Cordova应用 打开VS,选择[新建项目],选择其它语言JavaScript或者Ty ...

  8. Web开发知识点总结

    前言:这是一篇简单的web开发知识点的总结,适用于刚开始学习编程的人来学习的.我是为了能够在熟记熟记这些知识点而总结的一篇文章. 1       什么是浏览器? (1) 浏览器就是接收浏览者的操作(打 ...

  9. JavaScript基础-对象<1>

    1.JavaScript内部对象属性和方法 (1)内置String对象 String 对象是JavaScript的核心对象之一. 创建一个sting对象: var a="this defin ...

  10. VIM 拼写/spell check

    VIM 拼写检查/spell check 一.Hunspell科普 Hunspell 作为一个拼写检查的工具,已经用在了许多开源的以及商业软件中.包括Google Chrome, Libreoffic ...