사용자 지정 HTML 도우미 만들기(C#)
이 자습서의 목표는 MVC 보기 내에서 사용할 수 있는 사용자 지정 HTML 도우미를 만드는 방법을 보여 주는 것입니다. HTML 도우미를 활용하여 표준 HTML 페이지를 만들기 위해 수행해야 하는 HTML 태그의 지루한 입력 양을 줄일 수 있습니다.
이 자습서의 목표는 MVC 보기 내에서 사용할 수 있는 사용자 지정 HTML 도우미를 만드는 방법을 보여 주는 것입니다. HTML 도우미를 활용하여 표준 HTML 페이지를 만들기 위해 수행해야 하는 HTML 태그의 지루한 입력 양을 줄일 수 있습니다.
이 자습서의 첫 번째 부분에서는 ASP.NET MVC 프레임워크에 포함된 기존 HTML 도우미 중 일부를 설명합니다. 다음으로 사용자 지정 HTML 도우미를 만드는 두 가지 방법을 설명합니다. 정적 메서드를 만들고 확장 메서드를 만들어 사용자 지정 HTML 도우미를 만드는 방법을 설명합니다.
HTML 도우미 이해
HTML 도우미는 문자열을 반환하는 메서드일 뿐입니다. 문자열은 원하는 모든 형식의 콘텐츠를 나타낼 수 있습니다. 예를 들어 HTML 도우미를 사용하여 HTML 및 태그와 <img>
같은 <input>
표준 HTML 태그를 렌더링할 수 있습니다. HTML 도우미를 사용하여 탭 스트립 또는 데이터베이스 데이터의 HTML 테이블과 같은 더 복잡한 콘텐츠를 렌더링할 수도 있습니다.
ASP.NET MVC 프레임워크에는 다음과 같은 표준 HTML 도우미 집합이 포함되어 있습니다(전체 목록은 아님).
- Html.ActionLink()
- Html.BeginForm()
- Html.CheckBox()
- Html.DropDownList()
- Html.EndForm()
- Html.Hidden()
- Html.ListBox()
- Html.Password()
- Html.RadioButton()
- Html.TextArea()
- Html.TextBox()
예를 들어 목록 1의 양식을 고려합니다. 이 양식은 표준 HTML 도우미 두 가지의 도움을 받아 렌더링됩니다(그림 1 참조). 이 양식은 Html.BeginForm()
및 Html.TextBox()
도우미 메서드를 사용하여 간단한 HTML 양식을 렌더링합니다.
그림 01: HTML 도우미로 렌더링된 페이지(전체 크기 이미지를 보려면 클릭)
목록 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() 도우미 메서드는 여는 HTML 태그와 닫는 HTML <form>
태그를 만드는 데 사용됩니다. 메서드는 Html.BeginForm()
using 문 내에서 호출됩니다. using 문을 사용하면 <form>
using 블록의 끝에서 태그가 닫힙니다.
원하는 경우 using 블록을 만드는 대신 Html.EndForm() 도우미 메서드를 호출하여 태그를 닫을 <form>
수 있습니다. 가장 직관적으로 보이는 여는 태그와 닫는 <form>
태그를 만드는 방법을 사용합니다.
도우미 메서드는 Html.TextBox()
목록 1에서 HTML <input>
태그를 렌더링하는 데 사용됩니다. 브라우저에서 원본 보기를 선택하면 목록 2에 HTML 원본이 표시됩니다. 원본에 표준 HTML 태그가 포함되어 있습니다.
중요
Html.TextBox()
-HTML 도우미는 태그 대신 <% %>
태그로 <%= %>
렌더링됩니다. 등호를 포함하지 않으면 아무 것도 브라우저에 렌더링되지 않습니다.
ASP.NET MVC 프레임워크에는 작은 도우미 집합이 포함되어 있습니다. 대부분의 경우 사용자 지정 HTML 도우미를 사용하여 MVC 프레임워크를 확장해야 합니다. 이 자습서의 나머지 부분에서는 사용자 지정 HTML 도우미를 만드는 두 가지 방법을 알아봅니다.
목록 2 – Index.aspx Source
<%@ 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>
정적 메서드를 사용하여 HTML 도우미 만들기
새 HTML 도우미를 만드는 가장 쉬운 방법은 문자열을 반환하는 정적 메서드를 만드는 것입니다. 예를 들어 HTML <label>
태그를 렌더링하는 새 HTML 도우미를 만들기로 결정한다고 상상해 보세요. 목록 2의 클래스를 사용하여 를 렌더링할 수 있습니다 <label>
.
목록 2 – 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()
단순히 문자열을 반환합니다.
목록 3의 수정된 인덱스 뷰는 을 LabelHelper
사용하여 HTML <label>
태그를 렌더링합니다. 보기에는 네임스페이스를 가져오는 지시문이 Application1.Helpers
포함되어 <%@ imports %>
있습니다.
목록 2 – 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>
확장 메서드를 사용하여 HTML 도우미 만들기
ASP.NET MVC 프레임워크에 포함된 표준 HTML 도우미처럼 작동하는 HTML 도우미를 만들려면 확장 메서드를 만들어야 합니다. 확장 메서드를 사용하면 기존 클래스에 새 메서드를 추가할 수 있습니다. HTML 도우미 메서드를 만들 때 뷰의 Html 속성으로 표시되는 HtmlHelper 클래스에 새 메서드를 추가합니다.
목록 3의 클래스는 라는 Label()
클래스에 확장 메서드를 HtmlHelper
추가합니다. 이 클래스에 대해 알아야 할 몇 가지 사항이 있습니다. 먼저 클래스가 정적 클래스임을 확인합니다. 정적 클래스를 사용하여 확장 메서드를 정의해야 합니다.
둘째, 메서드의 Label()
첫 번째 매개 변수 앞에 키워드(keyword) this
합니다. 확장 메서드의 첫 번째 매개 변수는 확장 메서드가 확장하는 클래스를 나타냅니다.
목록 3 – Helpers\LabelExtensions.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Helpers
{
public static class LabelExtensions
{
public static string Label(this IHtmlHelper helper, string target, string text)
{
return String.Format("<label for='{0}'>{1}</label>", target, text);
}
}
}
확장 메서드를 만들고 애플리케이션을 성공적으로 빌드한 후 확장 메서드는 클래스의 다른 모든 메서드와 마찬가지로 Visual Studio Intellisense에 표시됩니다(그림 2 참조). 유일한 차이점은 확장 메서드가 옆에 특수 기호(아래쪽 화살표 아이콘)와 함께 표시된다는 것입니다.
그림 02: Html.Label() 확장 메서드 사용(전체 크기 이미지를 보려면 클릭)
목록 4의 수정된 인덱스 보기는 Html.Label() 확장 메서드를 사용하여 모든 태그를 <label>
렌더링합니다.
목록 4 – 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>
요약
이 자습서에서는 사용자 지정 HTML 도우미를 만드는 두 가지 방법을 알아보았습니다. 먼저 문자열을 반환하는 정적 메서드를 만들어 사용자 지정 Label()
HTML 도우미를 만드는 방법을 알아보았습니다. 다음으로, 클래스에서 확장 메서드를 만들어 사용자 지정 Label()
HTML 도우미 메서드 HtmlHelper
를 만드는 방법을 알아보았습니다.
이 자습서에서는 매우 간단한 HTML 도우미 메서드를 빌드하는 데 집중했습니다. HTML 도우미는 원하는 만큼 복잡할 수 있습니다. 트리 뷰, 메뉴 또는 데이터베이스 데이터 테이블과 같은 풍부한 콘텐츠를 렌더링하는 HTML 도우미를 빌드할 수 있습니다.