M H*_*M H 1 c# asp.net user-controls
我有5个文件。
我已在 default.aspx 页面中注册了 ascx 文件,并使用属性将控件公开给默认页面。这效果很好。
我的问题是如何在不同的 ascx 页面之间发送回和第四个数据?如果我注册其中任何一个,都会出现循环文件引用错误。
使用公共属性,我在 GridSQL.ascx 上注册了 Search.ascx,以将搜索参数传递到 Gridsql 字符串中,然后在 Grid.ascx 文件上注册 GridSQL.ascx,以将 sql 字符串传递到网格数据绑定。
必须有一种更简单的方法来在页面之间传递数据 BACK & FOURTH,还是我错了?当您尝试在其他页面上注册以将数据传递回发送它的页面时,您会收到循环文件引用错误。我听说过一些解决方案,例如更改文件结构(我已经尝试过)以及有关批处理的解决方案,但这会降低性能。相信我已经花了几天时间试图找到解决这个问题的方法。我本来打算对一些问题发表评论,但 Stack 不允许我发表评论,直到我有 50 名代表。
我的公司要求我们从现在开始使用所有单独的文件,我简直不敢相信这是用户控件之间通信的最佳方式。
正确的方法是您希望将子控件的事件冒泡到父控件。
然后让父控件将事件转发给其他控件。
注意:这是演示。您可能想要重命名对您的场景有意义的委托和方法。
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="Search.ascx.cs" Inherits="DemoWebForm.Search" %>
<asp:TextBox runat="server" ID="SearchTextBox" />
<asp:Button runat="server" ID="SearchButton"
Text="Search" OnClick="SearchButton_Click" />
public delegate void MessageHandler(string searchText);
public partial class Search : System.Web.UI.UserControl
{
public event MessageHandler SearchText;
protected void SearchButton_Click(object sender, EventArgs e)
{
SearchText(SearchTextBox.Text);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,GridSql.ascx 接收搜索文本。
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="GridSql.ascx.cs" Inherits="DemoWebForm.GridSql" %>
<asp:Label runat="server" ID="SearchTextLabel"/>
public partial class GridSql : System.Web.UI.UserControl
{
public void SearchTextMethod(string searchText)
{
SearchTextLabel.Text = searchText;
}
}
Run Code Online (Sandbox Code Playgroud)
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Parent.aspx.cs" Inherits="DemoWebForm.Parent" %>
<%@ Register src="~/Search.ascx" tagname="Search" tagprefix="uc1" %>
<%@ Register src="~/GridSql.ascx" tagname="GridSql" tagprefix="uc2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<uc1:Search ID="Search1" runat="server" />
<uc2:GridSql ID="GridSql1" runat="server" />
</form>
</body>
</html>
public partial class Parent : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Search1.SearchText += m => GridSql1.SearchTextMethod(m);
}
}
Run Code Online (Sandbox Code Playgroud)