Button / LinkButton / ImageButton

Reference: ASP.NET 2.0 웹프로젝트와 실전 프로그래밍

==================================

Button과 LinkButton 그리고 ImageButton 컨트롤은 출력되는 모양은 다르지만 기능적인 면에서 흡사한 점이 많습니다. 따라서 ASP.NET 2.0 에서는 이 컨트롤들이 IButtonControl이라는 새로운 인터페이스를 상속하도록 변경되었습니다. IButtonControl 인터페이스는 아래와 같이 정의 되여 있습니다.

public interface IButtonControl

{

     bool CausesValidation {get; set;}

     string CommandArgument {get; set;}

     string CommandName {get; set;}

     string PostBackUrl {get; set;}

     string Text {get; set;}

     string ValidationGroup {get; set;}

     event EventHandler Click ;

     event CommandEventHandler Command ;

}

보는 바와 같이 버튼 컨트롤의 핵심적인 기능은 모두 IButtonControl 인터페이스의 멤버로 정의되어 있습니다. IButtonControl 중에 낮설은 멤버는 ValidationGroup인데 유효성 검사의 단점을 보완하기 위해 ASP.NET 2.0에서 추가된 속성입니다. ASP.NET Framework 에서는 3종류의 버튼을 직접 참조하는 대신 IButtonControl 를 이용해서 버튼의 동작을 제어합니다.

IButtonControl 에서 상속된 멤버 외도 세 종류의 버튼 컨트롤에는 새로 추가된 멤버들이 있습니다. 추가된 멤버는 OnClientClick과 UseSubmitBehavior 속성입니다. OnClientClick 속성은 세 컨트롤에 모두 포함되어 있지만, UseSubmitBehavior 속성은 버튼 컨트롤에만 정의 되어 있습니다. OnClientClick 은 버튼 클릭시 클라이언트에서 실행될 스크립트를 지정하는 속성입니다.

UseSubmitBehavior 속성의 역할은 클라이언트에서 포스트백을 일으키는 방법을 결정하는 것입니다. 기본값으로 UseSubmitBehavior 은 true로 설정되어 있는데, 이 경우에는 브라우저의 내장 폼 전송(submit) 메커니즘을 이용합니다. 그러나 UseSubmitBehavior 가 false이면 스크립트 함수인 '_doPostBack(...)'(ClientScriptManager.GetPostBackEventReference 메서드에 의해 생성된다) 를 호출해서 포스트백을 수행한다.

[UseSubmitBehavior = "true"]  =>  <input type = "submit" ... />

[UseSubmitBehavior = "false"]  => <input type = "button" onclick = "__doPostBack('Button','')" ... />

 UseSubmitBehavior 가 어떤 값이든지 포스트백이 발생한다는 점에서 동일하고 서버에서 이벤트를 처리하는 방법에도 차이가 없지만, 서버로 전송되는 폼 데이터에 차이가 있습니다. UseSubmitBehavior 가 true 이면 Button 컨트롤의 아이디가 폼 파라미터의 일원으로 포함되고, UseSubmitBehavior 가 false이면 숨김 필드인 _ _EVENTARGET의 값으로 Button 컨트롤의 아이디가 설정 됩니다. 따라서 포스트백 시에 사용자 정의 스크립트를 추가하고 싶을 때 UseSubmitBehavior 를 false로 지정하면 편할 때가 있습니다.

우에서 OnClientClick 은 버튼 클릭시 클라이언트에서 실행될 스크립트를 지정하는 속성이라고 말씀 드렸는데 아래 대모를 보시면 인츰 이해가 될 것입니다.

==========================================================================================

ASP.NET 웹 사이트를 만들고 그 안에 "Button" 이라는 폴더를 만들고 폴더 안에 "ButtonTest"라는 WebForm을 추가 했습니다.

ButtonTest.aspx

============

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ButtonTest.aspx.cs" Inherits="Button_ButtonTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void Buttons_Command(object sender, CommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "B":
                Response.Write("Button 컨트롤을 클릭 하셨습니다!");
                break;
            case "L":
                Response.Write("LinkButton 컨트롤을 클릭 하셨습니다!");
                break;
            case "I":
                Response.Write("ImageButton 컨트롤을 클릭 하셨습니다!");
                break;
        }
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="alert('Button 클릭!')" CommandName="B" OnCommand="Buttons_Command" />
        <br />
        <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="alert('LinkButton 클릭!')" CommandName="L"
         OnCommand="Buttons_Command">LinkButton</asp:LinkButton>
         <br />
        <asp:ImageButton ID="ImageButton1" runat="server" OnClientClick="alert('ImageButton 클릭!')" CommandName="I" OnCommand="Buttons_Command"
         ImageUrl="../Images/image01.gif" Width="100px" />
    </div>
    </form>
</body>
</html>

posted @ 2009-02-01 10:53  OOK  阅读(583)  评论(0编辑  收藏  举报