zoukankan      html  css  js  c++  java
  • Asp.Net MVC 视图 创建自定义HTML Helpers

    Asp.Net MVC 视图(创建自定义HTML Helpers)

    1.创建自定义HTML Helper

    本篇教程的目的是为你演示如何创建自定义HTML Helper,你可以在MVC视图中使用它们。通过利用HTML Helpers,你可以减少大量HTML标签的输入,你必须输入这些标签来创建标准的HTML页面。

    在这篇教程的第一部分,我描述了一些包含在ASP.NET MVC中的现有的HTML Helper。接下来,我描述了两个创建自定义HTML Helpers的方法:我揭示了如何通过创建静态方法和创建扩展方法来创建自定义HTML Helpers。

    2.理解HTML Helpers

    HTML Helper只不过是一个返回字符串的方法。这个字符串可以代表你想要的任何类型。举个例子,你可以使用HTML Helper来呈现标准的HTML标签,类似HTML <input>和<img>标签。你也可以使用HTML Helpers来呈现更加复杂的内容,例如一个标签页或者一个数据库数据的HTML表格。

    ASP.NET MVC框架包含了下面的标准HTML Helpers集合(这里没有列全):

    • Html.ActionLink()
    • Html.BeginForm()
    • Html.CheckBox()
    • Html.DropDownList()
    • Html.EndForm()
    • Html.Hidden()
    • Html.ListBox()
    • Html.Password()
    • Html.RadioButton()
    • Html.TextArea()
    • Html.TextBox()

    举个例子,考虑代码清单1中的表单。这个表单是在两个标准的HTML Helpers的帮助下完成的。这个表单使用了Html.BeginForm()和Html.TextBox()Helper方法来呈现一个简单的HTML表单。

    图1:使用HTML Helpers呈现的页面

    代码清单1 - Views\Home\Index.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Views.Home.Index"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns= "http://www.w3.org/1999/xhtml ">
    <head id="Head1" runat="server">
         <title>Index</title>
    </head>
    <body>
          <div>
              <% using (Html.BeginForm())
              { %>
                   <label for="firstName">First Name:</label>
                   <br />
                   <%= Html.TextBox("firstName")%>
                   <br /><br />
                   <label for="lastName">Last Name:</label>
                   <br />
                   <%= Html.TextBox("lastName")%>
                   <br /><br />
                   <input type="submit" value="Register" />   
              <% } %>
         1     </div>
    </body>
    </html>

    Html.BeginForm()Helper方法用于创建HTML<form>的开闭标签。注意到Html.BeginForm()方法在一个using语句内被调用。using语句确保了<form>标记在using块末尾关闭。

    如果你喜欢,可以不创建using块,你可以调用Html.EndForm()Helper方法来关闭<form>标签。使用对你来说感觉最好的方式来创建<form>的开闭标签。

    Html.TextBox()Helper方法用于在代码清单1中呈现HTML<input>标签。如果你在你的浏览器中选择“查看源文件”,那么你会看到代码清单2中的HTML源代码。注意到源代码中包含了标准的HTML标签。

    NOTE:注意Html.TextBox(),HTML Helper使用<%= %>标签来呈现,而不是<% %>标签。如果你不包含这个等号,那么不会有任何东西呈现至浏览器。

    ASP.NET MVC框架包含很少一些Helpers方法。更可能的是,你需要使用自定义HTML Helpers来扩展MVC框架。在这篇教程的剩余部分,你会学习两个创建自定义HTML Helpers的方法。

    代码清单2 - Index.aspx源代码

    <%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Index" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
         <title>Index</title>
    </head>
    <body>
         <div>
              <form action="http://localhost:33102/" method="post">
                   <label for="firstName">First Name:</label>
                   <br />
                   <input id="firstName" name="firstName" type="text" value="" />
                   <br /><br />
                   <label for="lastName">Last Name:</label>
                   <br />
                   <input id="lastName" name="lastName" type="text" value="" />
                   <br /><br />
                   <input id="btnRegister" name="btnRegister" type="submit" value="Register" />
              </form>
         </div>
    </body>
    </html>

    3.使用静态方法创建HTML Helpers

    创建一个新HTML Helper的最简单方法就是创建一个返回字符串的静态方法。举个例子,假设你决定创建一个HTML Helper,它呈现一个HTML <label>标签。你可以使用代码清单3中的类来呈现一个<label>。

    代码清单3 - Helpers\LabelHelper.cs

    using System;
    namespace MvcApplication1.Helpers{
        public class LabelHelper{
            public static string Label(string target, string text){
                return String.Format("<label for='{0}'>{1}</label>", target, text);
            }
        }
    }

    对于代码清单2中的类没有什么好说的。Label()方法简单地返回了一个字符串。

    代码清单4中修改过了的Index视图使用了LabelHelper来呈现HTML <label>标签。注意到视图包含一个<%@ imports %>指令,它导入了Application1.Helpers命名空间。

    代码清单4 - Views\Home\Index2.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index2.aspx.cs" Inherits="MvcApplication1.Views.Home.Index2"%>
    <%@ Import Namespace="MvcApplication1.Helpers" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
         <title>Index2</title>
    </head>
    <body>
         <div>
              <% using (Html.BeginForm())
              { %>
                   <%= LabelHelper.Label("firstName", "First Name:") %>
                   <br />
                   <%= Html.TextBox("firstName")%>
                   <br /><br />
                   <%= LabelHelper.Label("lastName", "Last Name:") %>
                   <br />
                   <%= Html.TextBox("lastName")%>
                   <br /><br />
                   <input type="submit" value="Register" />
              <% } %>
         </div>
    </body>
    </html>

    4.使用扩展方法创建HTML Helpers

    如果你想创建一个HTML Helpers,就好像它包含在ASP.NET MVC框架中一样,那么你需要创建扩展方法。扩展方法使你能够为已有的类添加新的方法。当创建HTML Helper方法的时候,你为HtmlHelper类添加新的方法,该类由视图的Html属性所表示。

    代码清单5中的类为HtmlHelper类添加了一个叫做Label()的扩展方法。对于这个类有几个需要注意的地方。首先,注意到这个类是一个静态类。你必须将扩展方法定义在静态类中。

    其次,注意到Label()方法的第一个参数前面有一个关键字this。扩展方法的第一个参数说明了这个扩展方法所扩展的类。

    代码清单5 - Helpers\LabelExtensions.cs

    using System;
    using System.Web.Mvc;

    namespace MvcApplication1.Helpers {
        public static class LabelExtensions {
            public static string Label(this HtmlHelper helper, string target, string text) {
                return String.Format("<label for='{0}'>{1}</label>", target, text);
            }
        }
    }

    在创建了扩展方法,并且成功生成了应用程序之后,扩展方法会出现在Visual Stuidio的智能感知中,就好像这个类的所有其他方法一样(如图2)。唯一的区别是扩展方法出现时在它们旁边有一个特殊的标记(一个向下的箭头图标)。

    图2:使用Html.Label()扩展方法

    代码清单6中修改后的Index视图使用了Html.Label()扩展方法来呈现它所有的<label>标签。

    代码清单6 - Views\Home\Index3.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index3.aspx.cs" Inherits="MvcApplication1.Views.Home.Index3" %>
    <%@ Import Namespace="MvcApplication1.Helpers" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
         <title>Index3</title>
    </head>
    <body>
         <div>
              <% using (Html.BeginForm())
              { %>
                   <%= Html.Label("firstName", "First Name:") %>   
                   <br />
                   <%= Html.TextBox("firstName")%>
                   <br /><br />
                   <%= Html.Label("lastName", "Last Name:") %>   
                   <br />
                   <%= Html.TextBox("lastName")%>
                   <br /><br />
                   <input type="submit" value="Register" />
              <% } %>
         </div>
    </body>
    </html>

    5.总结

    在这篇教程中,你学习了两种创建自定义HTML Helpers的方法。首先,你学习了如何通过创建返回字符串的静态方法来创建自定义Label() HTML Helper。接下来,你学习了如何通过在HtmlHelper类上创建扩展方法来创建自定义Label()Html Helper方法。

    在这篇叫程中,我将精力集中在创建极其简单的HTML Helper方法。应该意识到你想要多么复杂,HTML Helper就可以多么复杂。你可以创建HTML Helpers来呈现丰富的内容,例如树形结构、菜单或者数据库数据表格。

  • 相关阅读:
    mysql delete 不支持表别名
    查找应用编译时所找的动态库:LD_DEBUG
    ng
    linux 开机启动自动执行某用户的脚步、程序
    理解Linux系统中的load average(图文版)
    char指针与数组(转载)
    堆 栈 静态区
    linux下which、whereis、locate、find 命令的区别
    linux c动态库编译好了,不能用。有些方法报(undefined reference)错误。
    浅谈管理系统操作日志设计(附操作日志类)
  • 原文地址:https://www.cnblogs.com/millen/p/1626499.html
Copyright © 2011-2022 走看看