【问题标题】:ASP.Net More than 1 form?ASP.Net 多于 1 种形式?
【发布时间】:2009-11-02 20:02:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    ASP.NET Web 窗体仅围绕 1-form 概念构建。要解决此问题,您需要使用不同的风格(如 MVC)或查看本文以了解如何在 Web 表单中解决此问题:

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

    【讨论】:

      【解决方案2】:

      不幸的是,对于 ASPNET 表单,您只能拥有一个带有 runat="server" 属性的 FORM 标记。

      但是,如果您排除 runat="server" 属性,您可以拥有任意数量的 FORM 标签(只要它们不相互嵌套)。

      例如,在您的母版页上,您可以在页面顶部有一个登录表单,然后在表单中包含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>
      

      【讨论】:

        【解决方案3】:

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

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

        希望这会有所帮助:-)

        【讨论】:

          【解决方案4】:

          它不能用 Asp.net web 表单完成(你可以有很多表单,但只有一个应该有一个 runat="server" 这不是实用的)但是你可以用 Asp.net MVC 轻松完成它

          【讨论】:

            【解决方案5】:

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

            请原谅使用内联代码,我认为这会使示例更易于理解。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-04-12
              • 1970-01-01
              • 2016-08-19
              • 2010-10-01
              • 1970-01-01
              • 2014-04-12
              • 1970-01-01
              • 2014-12-01
              相关资源
              最近更新 更多