ASP.Net超过1个表格?

时间:2009-11-02 20:02:40

标签: asp.net

在每个页面上(坐在主页面上)我都有登录字段。

在其他页面中,我有不同的控件,例如联系方式。

如何为此设置多个<form> - 标记?

5 个答案:

答案 0 :(得分:5)

ASP.NET Web窗体仅围绕1-form的概念构建。要解决这个问题,你需要使用不同的风格(一个MVC)或者看看这篇文章如何在Web窗体中解决它:

http://www.codeproject.com/KB/aspnet/CHtmlForm.aspx

答案 1 :(得分:3)

不幸的是,使用ASPNET表单时,您只能拥有一个带有FORM属性的runat="server"代码。

但是,如果排除FORM属性(并且只要它们没有嵌套在另一个内),您就可以拥有任意数量的runat="server"个标记。

例如,在您的母版页上,您可以在页面顶部有一个登录表单,然后将runat="server"的表单包含在较低的位置:

<form action="login" method="post">
  <input type="text" name="username" />
  <input type="password" name="password" />
  <input type="submit" value="Login" />
</form>

<form runat="server">
  ... place server controls here ...
</form>

答案 2 :(得分:1)

无法使用Asp.net网页表单(你可以有多种表单,但只有一个应该有一个runat =“server”,这不是很简单)但是你可以用Asp.net MVC轻松完成它

答案 3 :(得分:1)

有一种方法可以使用自定义HtmlForm类来切换表单,该类可以打开和关闭表单标记呈现。我发布了一篇博客文章,介绍如何将其用于PayPal并解决ASP.NET单一表单标记问题:

http://www.codersbarn.com/post/2008/03/08/Solution-to-ASPNET-Form-PayPal-Problem.aspx

希望这会有所帮助: - )

答案 4 :(得分:1)

您可以使用验证组将表单拆分为多个逻辑表单,以便可以在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以来一直存在。)。

请原谅使用内联代码,我认为这样可以使示例更容易理解。