C# 是否可以将一个Web用户控件注入另一个Web用户控件?

C# 是否可以将一个Web用户控件注入另一个Web用户控件?,c#,.net,asp.net,frameworks,C#,.net,Asp.net,Frameworks,我的Web应用程序上有一个Web用户控件(.NET Framework 3.5,C#): 你好,佩奇 现在,字符串strBuild的内容不是由Home.ascx.cs生成的,而是由Testo.ascx.cs生成的;所以我想我需要将Testo的Web用户控件注入Home 可能吗?如何操作?上下文始终是当前页面的上下文,为了使用在另一个页面和/或用户控件中定义的变量,您需要将其存储在会话中或作为QueryString参数传递(或存储/检索数据的类似方法),在另一个用户控件中,您可以使用相同的方式

我的Web应用程序上有一个Web用户控件(
.NET Framework 3.5
C#
):


你好,佩奇
现在,字符串
strBuild
的内容不是由
Home.ascx.cs
生成的,而是由
Testo.ascx.cs
生成的;所以我想我需要将
Testo的Web用户控件
注入
Home


可能吗?如何操作?

上下文始终是当前页面的上下文,为了使用在另一个页面和/或用户控件中定义的变量,您需要将其存储在会话中或作为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();
      }
    }

另一种可能的方法是在那里放置一个占位符,加载控件后,将其添加到占位符中,但由于您的问题中有一个字符串,因此我以这种方式键入。

是的,这是可能的,但有一些副作用

    // 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%明确的OPN你正在尝试,我不太清楚该建议什么!但是,归根结底,strBuild变量的内容可能应该填充到第三个用户控件中,然后在Testo和Home用户控件中使用。e、 g:

<%@ 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 Language="C#" AutoEventWireup="true" CodeFile="strBuild.ascx.cs" Inherits="context_centro_strBuild" %>
<%=strBuild %>

有道理吗

不管怎样,希望这有帮助,
Dave这很难看,但应该可以:

<%@ 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%明确的OPN你正在尝试,我不太清楚该建议什么!但是,归根结底,strBuild变量的内容可能应该填充到第三个用户控件中,然后在Testo和Home用户控件中使用。e、 g:

<%@ 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 Language="C#" AutoEventWireup="true" CodeFile="strBuild.ascx.cs" Inherits="context_centro_strBuild" %>
<%=strBuild %>

有道理吗

不管怎样,希望这有帮助,
Dave

你所说的“上下文”上下文=网络用户控制(编辑了这个问题)是什么意思?你所说的“上下文”上下文=网络用户控制(编辑了这个问题)是什么意思?是的,但我看不到与这个问题的相关性。是的,但我看不到与这个问题的相关性。