我的页面包含用户控件并继承了母版页。两者都有一个按钮。我把它放在表格标签中。我只是尝试从母版页和用户控件中冒泡。现在它因为多个表单标签错误而无法加载。怎么做?
主页:
<%@ 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");
}
}
}
我的目标是学习事件冒泡,但是我发布的代码出现了一些基本错误。
答案 0 :(得分:3)
您的用户控件不应该有&lt;形式&GT;标签,由MasterPage处理所有页面/控件然后在该主控件内呈现&lt;形式&GT;标签
如果您希望用自己的表单控制用户,则必须更改为不同的MasterPage,并且说实话我不确定它是如何工作的。
答案 1 :(得分:2)
使用表单标记保持表单的ID不同。
<form id="form1" runat="server">
。
将其设为Id=1 , Id=2
等。
在母版页保留表单Id=1
中,在用户控制页面中将其设为2,在主aspx
中将其设为3。
或从usercontrol页面删除表单标记。
答案 2 :(得分:1)
由于您已将控件放在母版页中,因此需要在其上保留<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>
标记。