自定义HtmlHelper方法

一、Razor语法 在同一个页面中定义

@helper Truncate(string input, int length)

{

    if (input.Length <= length)

    {

       @input;

    }

    else

    {

       @input.Substring(0, length)<text>...</text>;

    }

}

 

引用方式:

        <td>

             @Truncate(item.Title, 25);

        </td>

 

@helper提示编译器,这是一个辅助方法,我们可以采用@MethodName的方法来使用该辅助方法。
      当然,在Web编程中,内联是一种不好的方式,因为它们会使得页面的加载变慢,尤其是页面的反复加载。更加常用的方式就是我们在一个命名空间里定义一个辅助方法,然后在页面中引入该辅助方法,这样页面就无需承担方法源码的加载负担。是不是在客户端已经存在代码?如果是那需要ASP.NET支持?

 

二.扩展方法

      采用这样的方式,我们通常需要新建一个文件夹,专门存放我们自定义的辅助方法(很多时候,我们自定义的辅助方法可能很多,但像是Controller,Models这样的文件夹并不适合存放这些方法),其实也就是专门为辅助方法建立一个新的命名空间。

说明:

 

扩展方法:

1.方法所在的类必须是静态的

2.方法也必须是静态的

3.方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。

4.在第一个参数前面还需要有一个this关键字。

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web.Mvc;

 

namespace MusicShop.Helpers

{

    public static class MyHtmlHelper 

    {

        public static string Truncate(this HtmlHelper helper, string input, int length)  

        {

            if (input.Length <= length)

            {

                return input;

            }

            else

            {

                return input.Substring(0, length) + "...";

            }

        }

    }

}

 

使用:

@using MusicShop.Helpers

 <td>

         @Html.Truncate(item.Artist.Name, 25);

 </td>

 @using是必须的,引入辅助方法所在的命名空间。对于辅助方法的处理可以看到,我们是将其当成HtmlHelper的扩展方法使用。扩展方法的使用,使得原本非常复杂的MVC设计也能具有良好的可读性,而且灵活度和复用性非常高。

 

三.Razor view

       我们可以新建一个cshtml,像是下面这样:

@helper TruncateString(string input, int length)

{

    if (input.Length <= length) {

        @input

    } else {

        @input.Substring(0, length)<text>...</text>

    }

}

 

然后就是我们的页面:

        <td>

             @Helpers.Truncate(item.Title, 25);

        </td

        使用这种方法,就没有Razor语法的内联,也没有扩展方法的后顾之忧,而且我们还可以自由的添加新的自定义方法,但是,注意,Helpers.cshtml必须放在App_Code里面。

 

posted @ 2021-02-02 14:43  清语堂  阅读(128)  评论(0编辑  收藏  举报