Вы можете использовать группы проверки для разделения формы на несколько логических форм, чтобы можно было вызывать проверку в обработчиках событий Click для кнопок. Это действительно все, для чего вам нужно несколько форм в ASP.Net, если только вы не пытались избежать отправки данных из всех полей формы обратно при обратной передаче.
Попробуйте следующий пример страницы:
<%@ Page Language="C#" %>
<!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 runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<script runat="server">
protected void btnSendMessage_Click(object sender, EventArgs e)
{
Page.Validate("contact");
if (!Page.IsValid)
return;
}
protected void btnLogin_Click(object sender, EventArgs e)
{
Page.Validate("login");
if (!Page.IsValid)
return;
}
</script>
<table>
<tr>
<td>
<asp:Label ID="lblUsername" AssociatedControlID="txtName" runat="server">Username:</asp:Label>
</td>
<td>
<asp:TextBox ID="txtName" ValidationGroup="login" runat="server" />
<asp:RequiredFieldValidator ID="reqName" ControlToValidate="txtName" Display="Dynamic" ErrorMessage="You must supply a username"
ValidationGroup="login" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblPassword" AssociatedControlID="txtPassword" runat="server">Password:</asp:Label>
</td>
<td>
<asp:TextBox ID="txtPassword" ValidationGroup="login" runat="server" />
<asp:RequiredFieldValidator ID="reqPassword" ControlToValidate="txtPassword" Display="Dynamic" ErrorMessage="You must supply a password"
ValidationGroup="login" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnLogin" Text="Login" ValidationGroup="login" OnClick="btnLogin_Click" runat="server" />
</td>
</tr>
</table>
<hr />
<h1>Contact</h1>
<table>
<tr>
<td>
<asp:Label ID="lblYourName" AssociatedControlID="txtYourName" runat="server">Your name:</asp:Label>
</td>
<td>
<asp:TextBox ID="txtYourName" runat="server" ValidationGroup="contact" />
<asp:RequiredFieldValidator ID="reqYourName" ControlToValidate="txtYourName" Display="Dynamic" ErrorMessage="Tell us your name!"
ValidationGroup="contact" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblYourEmail" AssociatedControlID="txtYourEmail" runat="server">Your email:</asp:Label>
</td>
<td>
<asp:TextBox ID="txtYourEmail" runat="server" ValidationGroup="contact" />
<asp:RequiredFieldValidator ID="reqEmail" ControlToValidate="txtYourEmail" Display="Dynamic" ErrorMessage="Tell us your email!"
ValidationGroup="contact" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblMessage" AssociatedControlID="txtMessage" runat="server">Your message:</asp:Label>
</td>
<td>
<asp:TextBox ID="txtMessage" TextMode="MultiLine" runat="server" ValidationGroup="contact" />
<asp:RequiredFieldValidator ID="reqMessage" ControlToValidate="txtMessage" Display="Dynamic" ErrorMessage="We need you to send us a message!"
ValidationGroup="contact" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnSendMessage" ValidationGroup="contact" Text="Contact" OnClick="btnSendMessage_Click" runat="server" />
</td>
</tr>
</table>
</form>
</body>
</html>
Здесь вы получаете подтверждение, и оно ведет себя как две отдельные формы, хотя данные из обеих «форм» будут отправлены обратно.
Это стандартная парадигма для нескольких действий на странице, существующая со времени ASP.Net 2:).
Пожалуйста, прости за использование встроенного кода, я подумал, что это поможет последовать примеру.