在我的网页中,我使用了两个用户控件: 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" />
答案 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,并且控件显示正确。