是否可以将一个Web用户控件注入另一个Web使用者控件
本文关键字:控件 Web 用户 注入 使用者 另一个 一个 是否 | 更新日期: 2023-09-27 18:00:35
我的Web应用程序(.NET Framework 3.5
,C#
)上有一个Web用户控件:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Home.ascx.cs" Inherits="context_centro_Home" %>
<div class="main">
Hello page
</div>
<%=strBuild %>
现在,字符串strBuild
的内容不是由Home.ascx.cs
产生的,而是由Testo.ascx.cs
产生的;所以我认为我需要将Testo's Web User Control
注入到Home
中。
有可能吗?我该怎么做?
您可以将用户控件放在另一个用户控件中,就像将用户控件放置在页面中一样,即放在标记中。你不需要"注入"任何东西。
上下文将始终是当前页面的上下文,为了使用在另一个页面和/或用户控件中定义的变量,您需要将其存储在Session中或作为QueryString参数传递(或类似的存储/检索数据的方法)。
是的,这是可能的,但有一些副作用。
// load the control
var oTesto = Page.LoadControl("Testo.ascx");
// here you need to run some initialization of your control
// because the page_load is not loading now.
// a string writer to write on it
using(TextWriter stringWriter = new StringWriter())
{
// a html writer
using(HtmlTextWriter GrapseMesaMou = new HtmlTextWriter(stringWriter))
{
// now render the control inside the htm writer
oTesto.RenderControl(GrapseMesaMou);
// here is your control rendered output.
strBuild = stringWriter.ToString();
}
}
另一种可能的方法是在那里放置一个占位符,加载控件后,将其添加到占位符中,但由于您的问题中有一个字符串,所以我用这种方式键入它。
这很丑陋,但应该有效:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Home.ascx.cs" Inherits="context_centro_Home" %>
<uc1:Testo id="Testo1" runat="Server" Visible="false" />
<div class="main">
Hello page
</div>
<%=Testo1.strBuild %>
在提出了一个相当丑陋的解决方案后,我想更进一步地说,你可能想考虑在这里改变你的架构——因为我不是100%清楚你想要实现什么,我不太确定该建议什么!但是,最终,strBuild变量的内容可能应该填充在第三个用户控件中,然后在Testo和Home用户控件中使用该控件。例如:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Home.ascx.cs" Inherits="context_centro_Home" %>
<div class="main">
Hello page
</div>
<uc1:strBuild id="strBuild1" runat="Server" />
strBuild Control的样子:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="strBuild.ascx.cs" Inherits="context_centro_strBuild" %>
<%=strBuild %>
有道理吗?
不管怎样,希望能有所帮助,Dave