繁体   English   中英

在ASP.NET页面中处理多个表单标签?

[英]Handle Multiple Form tag in asp.net page?

我的页面包含一个用户控件,并继承一个母版页。 两者都有一个按钮。 我把它放在一个表单标签中。 我只是想从母版页以及用户控件中进行事件冒泡。 现在由于多个表单标签错误而无法加载。 怎么做?

母版页:

<%@ Master Language="C#" AutoEventWireup="True" CodeBehind="SampleSite.master.cs" Inherits="EventBubbling.SampleSite" %>

<!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>
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            <asp:Button ID="Button1" runat="server" Text="MasterPageButton" />
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

用户控制:

<%@ Control Language="C#" AutoEventWireup="True" CodeBehind="SampleUserControl.ascx.cs"
    Inherits="EventBubbling.Controls.SampleUserControl" EnableViewState="false" %>

 <!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 id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="btnUC" runat="server" OnClick="btnUC_Click" Text="UserControlButton" />
    </div>
    </form>
</body>
</html>

用户control.cs页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EventBubbling.Controls
{
    public partial class SampleUserControl : System.Web.UI.UserControl
    {
        public event EventHandler buttonClick;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnUC_Click(object sender, EventArgs e)
        {
            buttonClick(sender, e);
        }
    }
}

主页 :

<%@ Page Language="C#" AutoEventWireup="True" MasterPageFile="~/SampleSite.Master"
    CodeBehind="Default.aspx.cs" Inherits="EventBubbling._Default" %>

<%@ Register Src="~/Controls/SampleUserControl.ascx" TagPrefix="uc" TagName="SampleUserControl" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <div>
        <uc:SampleUserControl ID="UC1" runat="server" />
    </div>
</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 EventBubbling
{
    public partial class _Default : System.Web.UI.Page
    {
        Button btn = new Button();

        protected void Page_Load(object sender, EventArgs e)
        {
            UC1.buttonClick += new EventHandler(UC1_buttonClick);
            btn = this.Master.FindControl("Button1") as Button;
            btn.Click += new EventHandler(btn_Click);

        }

        void btn_Click(object sender, EventArgs e)
        {
            Response.Write("EventBubbling from MasterPage");
        }

        void UC1_buttonClick(object sender, EventArgs e)
        {
            Response.Write("EventBubbling from User control");
        }

    }
}

我的目标是学习事件冒泡,但是我发布的这段代码出现了一些基本错误。

您的用户控件不应具有<form>标记,MasterPage会对此进行处理,所有页面/控件都将呈现在此master控件<form>标记内。

如果要使用自己的表单来控制用户,则必须更改为另一个MasterPage,老实说,我不知道该怎么做。

在每个使用表单标记的地方都使表单ID保持不同。

每个<form id="form1" runat="server">

将其设置为Id=1 , Id=2等。

在母版页中,保持表单Id=1 ,在用户控制页中,将其设置为2,在主aspx将其设置为3。

或从用户控制页面删除表单标签。

由于已将控件放置在母版页中,因此需要在其上保留<form>标记。

错误消息: A page can have only one server-side Form tag. 实际上应该被视为: A page can have only one visible server-side Form tag.

如果需要,可以有多个表单标签。 在这里阅读Asp.net的一个绝招: http : //blogs.msdn.com/b/kaevans/archive/2005/10/19/482778.aspx 绝对没有太大的实际用途。

否则,您需要更正userControl的标记。 删除标签,例如:head,html,form。 您对UserControl的最终标记将是:

<%@ Control Language="C#" AutoEventWireup="True" CodeBehind="SampleUserControl.ascx.cs"
    Inherits="EventBubbling.Controls.SampleUserControl" EnableViewState="false" %>
<div>
<asp:Button ID="btnUC" runat="server" OnClick="btnUC_Click" Text="UserControlButton" />
</div>

我希望您知道所有需要删除的内容。

所有将要成为此母版页一部分的页面或用户控件都不得包含任何<form>标记。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM