Asp.net ClientIdMode = "static" 的 Web 表单用户控件无法在 javascript 中访问
Asp.net web form user control with ClientIdMode = "static" cannot be accessed in javascript
我有一个在 ASP.Net 网页表单页面中使用的用户控件。在用户控件中,我设置了 ClientIdMode = "static" 例如
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="QuestionUserControl.ascx.cs"
Inherits="Kids.Math.Presentation.UserControls.QuestionUserControl" ClientIDMode="Static" %>
在我使用的表单中,我还将 Id 设置为:
<uc2:QuestionUserControl runat="server" ID="QuestionUserControl1" ClientIDMode="Static" />
但是,当 运行 我试图通过 getElementById("QuestionUserControl1") 或使用 JQuery $("# QuestionUserControl1") ... 它不起作用。实际上,用户控件似乎没有出现在源代码中......当检查源代码时我找不到 "QuestionUserControl1" 但是我可以找到其中的控件,例如 ctl00$MainContent$QuestionUserControl1$txtQuestion ...
不确定为什么没有显示用户控件 ID?
如有任何意见,我们将不胜感激...
更新:用户控件标记(请原谅内联标记样式,因为它只是一个测试版本...)
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="QuestionUserControl.ascx.cs"
Inherits="Kids.Math.Presentation.UserControls.QuestionUserControl" ClientIDMode="Static" %>
<style type="text/css">
.auto-style1 {
width: 100%;
}
</style>
<div runat="server" style="Width:100%; Height:100%;" class="panel-body panel-question" ClientIDMode="Static" id="pnlQuestion">
<div runat="server" style="Width:100%; Height:100%;" ClientIDMode="Static" ID="pnlTextbox">
<asp:TextBox ID="lblTimer" runat="server" BackColor="Black" BorderColor="Black" BorderStyle="None" BorderWidth="0px" ClientIDMode="Static" ForeColor="White" Visible="False" Width="100%" Font-Bold="True" Font-Size="Large" ReadOnly="True"></asp:TextBox>
<asp:TextBox CssClass="textarea" TextMode="MultiLine"
Height="100%" ID="txtQuestion" runat="server"
BackColor="Black" ReadOnly="True" Width="100%"
Font-Size="X-Large" ForeColor="White"></asp:TextBox>
</div>
<div style="Width:100%; Height:30%;">
<table class="auto-style1">
<tr>
<td>
<asp:Button ID="Answer1" runat="server" BorderStyle="Dashed"
CommandName="Answer1" Width="100%" OnCommand="Question_Answered" Enabled="False" BackColor="Black" Font-Size="X-Large" ForeColor="White" />
</td>
<td>
<asp:Button ID="Answer2" runat="server" BorderStyle="Dashed"
CommandName="Answer2" Width="100%" OnCommand="Question_Answered" Enabled="False" BackColor="Black" Font-Size="X-Large" ForeColor="White" />
</td>
<td>
<asp:Button ID="Answer3" runat="server" BorderStyle="Dashed"
CommandName="Answer3" Width="100%" OnCommand="Question_Answered" Enabled="False" BackColor="Black" Font-Size="X-Large" ForeColor="White" />`enter code here`
</td>
</tr>
</table>
</div>
<asp:HiddenField ID="HiddenField1" runat="server" />
</div>
ctl00$MainContent$QuestionUserControl1$txtQuestion 来自具有 ID txtQuestion 或类似内容的 asp 标签。
这不是答案,因为在问题中分享了糟糕的标记我建议这样做:
包装你的用户控件
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="QuestionUserControl.ascx.cs"
Inherits="Kids.Math.Presentation.UserControls.QuestionUserControl"%>
<asp:Placeholder id="uniqueID" runat="server" ClientIDMode="static">
<!-- your asp tags inside user control -->
</asp:Placeholder>
现在检查你的 html,如果你找到一个 div with id="uniqueID" -> 那是你的第一个由用户控件创建的标签。
我终于想到了这个词:
- 向用户控件添加了一个新按钮,称为错误答案
- 在 javascript 倒计时结束后
- 我为这个新按钮做了一个回发,即 __doPostBack("InCorrectAnswer", "");
然后在用户控件中,我决定在单击 InCorrectAnswer 时要执行的操作...这基本上意味着完成该过程。
这对我来说很好。
我有一个在 ASP.Net 网页表单页面中使用的用户控件。在用户控件中,我设置了 ClientIdMode = "static" 例如
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="QuestionUserControl.ascx.cs"
Inherits="Kids.Math.Presentation.UserControls.QuestionUserControl" ClientIDMode="Static" %>
在我使用的表单中,我还将 Id 设置为:
<uc2:QuestionUserControl runat="server" ID="QuestionUserControl1" ClientIDMode="Static" />
但是,当 运行 我试图通过 getElementById("QuestionUserControl1") 或使用 JQuery $("# QuestionUserControl1") ... 它不起作用。实际上,用户控件似乎没有出现在源代码中......当检查源代码时我找不到 "QuestionUserControl1" 但是我可以找到其中的控件,例如 ctl00$MainContent$QuestionUserControl1$txtQuestion ...
不确定为什么没有显示用户控件 ID?
如有任何意见,我们将不胜感激...
更新:用户控件标记(请原谅内联标记样式,因为它只是一个测试版本...)
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="QuestionUserControl.ascx.cs"
Inherits="Kids.Math.Presentation.UserControls.QuestionUserControl" ClientIDMode="Static" %>
<style type="text/css">
.auto-style1 {
width: 100%;
}
</style>
<div runat="server" style="Width:100%; Height:100%;" class="panel-body panel-question" ClientIDMode="Static" id="pnlQuestion">
<div runat="server" style="Width:100%; Height:100%;" ClientIDMode="Static" ID="pnlTextbox">
<asp:TextBox ID="lblTimer" runat="server" BackColor="Black" BorderColor="Black" BorderStyle="None" BorderWidth="0px" ClientIDMode="Static" ForeColor="White" Visible="False" Width="100%" Font-Bold="True" Font-Size="Large" ReadOnly="True"></asp:TextBox>
<asp:TextBox CssClass="textarea" TextMode="MultiLine"
Height="100%" ID="txtQuestion" runat="server"
BackColor="Black" ReadOnly="True" Width="100%"
Font-Size="X-Large" ForeColor="White"></asp:TextBox>
</div>
<div style="Width:100%; Height:30%;">
<table class="auto-style1">
<tr>
<td>
<asp:Button ID="Answer1" runat="server" BorderStyle="Dashed"
CommandName="Answer1" Width="100%" OnCommand="Question_Answered" Enabled="False" BackColor="Black" Font-Size="X-Large" ForeColor="White" />
</td>
<td>
<asp:Button ID="Answer2" runat="server" BorderStyle="Dashed"
CommandName="Answer2" Width="100%" OnCommand="Question_Answered" Enabled="False" BackColor="Black" Font-Size="X-Large" ForeColor="White" />
</td>
<td>
<asp:Button ID="Answer3" runat="server" BorderStyle="Dashed"
CommandName="Answer3" Width="100%" OnCommand="Question_Answered" Enabled="False" BackColor="Black" Font-Size="X-Large" ForeColor="White" />`enter code here`
</td>
</tr>
</table>
</div>
<asp:HiddenField ID="HiddenField1" runat="server" />
</div>
ctl00$MainContent$QuestionUserControl1$txtQuestion 来自具有 ID txtQuestion 或类似内容的 asp 标签。
这不是答案,因为在问题中分享了糟糕的标记我建议这样做:
包装你的用户控件
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="QuestionUserControl.ascx.cs"
Inherits="Kids.Math.Presentation.UserControls.QuestionUserControl"%>
<asp:Placeholder id="uniqueID" runat="server" ClientIDMode="static">
<!-- your asp tags inside user control -->
</asp:Placeholder>
现在检查你的 html,如果你找到一个 div with id="uniqueID" -> 那是你的第一个由用户控件创建的标签。
我终于想到了这个词: - 向用户控件添加了一个新按钮,称为错误答案 - 在 javascript 倒计时结束后 - 我为这个新按钮做了一个回发,即 __doPostBack("InCorrectAnswer", "");
然后在用户控件中,我决定在单击 InCorrectAnswer 时要执行的操作...这基本上意味着完成该过程。
这对我来说很好。