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

时间:2017-07-11 14:38:35

标签: asp.net

在我的网页中,我使用了两个用户控件: 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>

usercontrol1

<%@ 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" />

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。该模式由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>

打开模态的方法

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);   
}

因此,当调用控件时,javascript不知道应该打开哪个控件,在这种情况下,它将打开页面上的第一个控件。 为了解决这个问题,我通过asp面板更改了div,这样asp为每个控件生成了不同的客户端ID,并且控件显示正确。