네, HTML 폼에는 여러 개의 제출(submit) 버튼을 포함할 수 있습니다. 아래에 간단한 예제를 통해 그 방법을 소개합니다.
여기서는 MVC VB.NET을 기준으로 설명하겠습니다. 뷰(View)에서는 이름은 같지만 값(value)이 서로 다른 세 개의 버튼을 배치하고, 컨트롤러(Controller)에서는 문자열 타입의 동일한 이름의 매개변수(cmd)를 받아 버튼의 값(Save, Update, Delete)과 비교하여 어떤 버튼이 클릭되었는지 판별하는 방식입니다.
동작 원리
폼이 제출될 때 클릭된 제출 버튼의 name과 value가 함께 서버로 전송됩니다. 따라서 모든 버튼에 같은 name 속성을 지정하고 value만 다르게 설정하면, 컨트롤러에서 전달받은 값을 확인해 각각 다른 로직을 실행할 수 있습니다.
뷰(View) 예제 - multisubmit.aspx
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server">
<title>multiple submit button</title>
</head>
<body>
<div>
<% Using Html.BeginForm()%>
<%: Html.ValidationSummary(True) %>
<button type="submit" id="postback1" name="cmd" value="Save">Save</button>
<button type="submit" id="postback2" name="cmd" value="Update">Update</button>
<button type="submit" id="postback3" name="cmd" value="Delete">Delete</button>
<%: Html.Encode(ViewData("msg"))%>
<% End Using%>
</div>
</body>
</html>컨트롤러(Controller) 예제 - TestController
Function multisubmit() As ActionResult
Return View()
End Function
<HttpPost()> _
Function multisubmit(ByVal cmd As String) As ActionResult
If (cmd = "Save") Then
ViewData("msg") = "SAVE"
ElseIf (cmd = "Update") Then
ViewData("msg") = "UPDATE"
ElseIf (cmd = "Delete") Then
ViewData("msg") = "DELETE"
End If
Return View()
End Function코드 설명
위 예제에서 세 개의 버튼은 모두 type="submit"으로 설정되어 있으며, 공통적으로 name="cmd"를 가지고 있습니다. 사용자가 'Save' 버튼을 누르면 cmd=Save, 'Update' 버튼을 누르면 cmd=Update, 'Delete' 버튼을 누르면 cmd=Delete가 POST 방식으로 전송됩니다.
컨트롤러의 multisubmit 액션 메서드는 이 값을 받아 조건문으로 비교한 후, 결과 메시지를 ViewData("msg")에 담아 뷰로 반환합니다. 뷰에서는 Html.Encode(ViewData("msg"))를 통해 해당 메시지를 화면에 출력합니다.
이 방식은 별도의 JavaScript 없이 순수 HTML과 서버 코드만으로 여러 제출 버튼을 처리할 수 있는 간단하고 효율적인 방법입니다.