我需要在同一页面上的两个 runat= "server"



我是C#的新手,我发现当时我只能在一个页面上使用1个runat="server"。我的母版

页中有 1 个,登录页中有 1 个。

我需要它们两个工作,因为我的母版页中有一些 asp 按钮,我需要使用 masterpage.master 进行编辑.cs .

我还需要在我的登录页面上使用它来检查用户名和密码字段是否等于数据库中的数据。

如果我从runat="server"到常规表单中删除其中任何一个,则在后端代码页中找不到按钮和字段的 asp ID。以及表格将无法提交。(错误 500(

我是 .net 和 C# 的新手,想知道,有没有另一种方法可以在后端代码文件 (*.aspx.cs( 中使用 ID 或使用多个 runat="server" froms(带有解决方法或其他东西(?提前感谢!

有一种方法可以做到这一点,但一次form visible。不可能同时visible form都有runta="server"。只需在母版页中添加一个可用于在子页中执行formContentPlaceHolder。然后用两个Panel取两个form。之后,为母版页的形式设置可见性 false,为子页的形式设置可见性 true。请在下面查看。

母版页 ASPX:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebApplication2.SiteMaster" %>
<!DOCTYPE html>
<html lang="en">
<head runat="server">
</head>
<body>
    <asp:Panel ID="Panel1" runat="server">
        <form runat="server">
            <h1>Master Page Form</h1>
            <asp:ScriptManager runat="server">
            </asp:ScriptManager>

            <div class="container body-content">
                <asp:ContentPlaceHolder ID="MainContent" runat="server">
                </asp:ContentPlaceHolder>
                <hr />
                <footer>
                    <p>&copy; <%: DateTime.Now.Year %> - My ASP.NET Application</p>
                </footer>
            </div>
        </form>
    </asp:Panel>
    <asp:ContentPlaceHolder ID="login" runat="server">
    </asp:ContentPlaceHolder>
</body>
</html>

子页 ASPX:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication2.WebForm2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="login" runat="server">
    <asp:Panel ID="Panel2" runat="server">
        <form runat="server" id="loginform">
            <h1>Child Page Form</h1>
        </form>
    </asp:Panel>
</asp:Content>

子页面 CS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication2
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Panel panel1 = (Panel)Master.FindControl("Panel1");
            panel1.Visible = false;
        }
    }
}

不能有多个嵌套表单,并将 runat 属性设置为服务器。您可以在母版页中使用面板代替窗体。

在母版页中使用表单 runat = "服务器" 会导致 HTML 生成类似 HTML

<form method="POST">
</form>

当您在该表单标签中添加内容占位符并在子页面中创建另一个表单时,生成的 HTML 将是

<form method="POST"> //master page form
  <form method="POST"> //child page form
  </form>
</form>

所以最后你会得到无效的嵌套形式,因此ASP会抛出错误。

相反,如果我们用面板标签替换表单标签,它会给出div 或任何其他 html 标签,因此生成的 HTML 将是这样的

<div>
 <form method="POST">
 </form>
</div>

这是有效的 HTML,因此 ASP 不会抛出任何错误。

因此在母版页中

<asp:form runat="server".............>    
</asp:form>

应替换为

<asp:panel runate="server"...........>
</asp:panel>

如果也希望表单位于母版页中,则可以将表单放置在该面板之外

<asp:panel>
 <asp:contentplaceholder id="contentholder" />
</asp:panel>
<asp:form>
</asp:form>

最新更新