Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net页面中相同usercontrol的两个实例_Asp.net - Fatal编程技术网

asp.net页面中相同usercontrol的两个实例

asp.net页面中相同usercontrol的两个实例,asp.net,Asp.net,在我的网页中,我使用两个用户控件: ucControl1和ucControl2。ucControl1控件内部还包含ucControl2控件的实例。 运行应用程序并转到相关页面时,似乎只有ucControl1中的实例工作正常。当尝试直接在页面上执行ucControl2的功能时,它会正确执行后端代码,正确打开模式,但不会在屏幕上显示结果。 会发生什么 页面是这样的 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageSamp

在我的网页中,我使用两个用户控件: ucControl1和ucControl2。ucControl1控件内部还包含ucControl2控件的实例。 运行应用程序并转到相关页面时,似乎只有ucControl1中的实例工作正常。当尝试直接在页面上执行ucControl2的功能时,它会正确执行后端代码,正确打开模式,但不会在屏幕上显示结果。 会发生什么

页面是这样的

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageSample.aspx.cs" MasterPageFile="~/MasterPage.master" Inherits="PageSample" %>
<%@ MasterType VirtualPath="~/MasterPage.master" %>
<%@ Register Src="~/Controls/ucControl2.ascx" TagPrefix="uc2" TagName="ucControl2" %>
<%@ Register Src="~/Controls/ucControl1.ascx" TagPrefix="uc1" TagName="ucControl1" %>
<asp:Content runat="server" ContentPlaceHolder ID="cpSampleID">
    <div>
        <uc1:ucControl2 runat="server" ID="uc2" />   
    </div>
    <uc1:ucControl1 runat="server" ID="uc1" />
</asp:Content>

和用户控件1

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucControl1.ascx.cs" Inherits="ucControl1" %>
<%@ Register Src="~/Controls/ucControl2.ascx" TagPrefix="uc1" TagName="ucControl2" %>

 <%-- Something Something Something --%>
  <uc1:ucControl2 runat="server" ID="ucControl2" />

我找到了解决办法。模式由javascript打开

ucControl2

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucControl2.ascx.cs" Inherits="ucControl2" %>
<%@ Register Src="~/Controls/ucControl2.ascx" TagPrefix="uc2" TagName="ucControl2" %>
  <div id="modal">
    <!-- Some Textboxes -->
  </div>
因此,当调用该控件时,javascript不知道应该打开哪个控件,在本例中,它正在打开页面上的第一个控件。
为了解决这个问题,我通过asp面板更改了div,这样asp为每个控件生成了不同的客户端ID,并且控件显示正确。

我们需要查看用户控件本身,以及后端代码后端工作正常。它只是在文本框中设置一些文本值。我做了一些测试,页面的ucControl字段被填充,但是在呈现页面时,似乎总是呈现ucControl2内部的ucControl1。如果我从页面中删除ucControl1,效果会很好。“ucControl2中的ucControl1”。你的意思是相反的吗?无论如何,您给出的代码不足以发现问题。您可能认为您的后端工作正常,但显然代码中的某些内容导致了问题,因此我们需要查看它。抽象地说,没有理由认为您展示的设计不起作用。问题将出现在实施细节的某个地方。因此,请不要基于含糊不清、无法验证的“it works fine”陈述而提出反对意见,节省一些时间,发布代码,以便其他人能够有意义地帮助你。谢谢你非常友好的回答。我已经在这个问题的解决方案中加入了后端的更多细节。
public void OpenModal()
{
   string id = "modal";
   string js = $@"
               $(document).ready(function() {{
                   if ($('.modal.in').length > 0) {{
                       $('.modal').on('hidden', function() {{
                           $('.modal').off('hidden');
                           $('#{id}').modal({{show: true, keyboard: false, backdrop: 'static'}});
                       }});
                       $('.modal').modal('hide');
                   }} else {{
                       $('#{id}').modal({{show: true, keyboard: false, backdrop: 'static'}});
                   }}
               }});";

    ScriptManager.RegisterStartupScript(this, this.GetType(), id, js, true);   
}