zoukankan      html  css  js  c++  java
  • 自定义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里面。

  • 相关阅读:
    事事浑不着意,总得有走心的地方
    Struts2框架概述
    java算法数据结构
    shell十三问(转)
    linux:将job放在后台执行的方法
    Python性能(转)
    python collections deque
    python中的参数传递和返回值
    python中的下划线
    python学习笔记glob模块
  • 原文地址:https://www.cnblogs.com/wfy680/p/14361937.html
Copyright © 2011-2022 走看看