Asp.net 具有 ClientIdMode = 的 Web 表单用户控件"static"无法在 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")在javascript中访问此用户控件…这行不通。实际上,用户控件似乎没有出现在源代码中…检查源时,我找不到"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标签。

这不是一个答案,因为问题中共享了糟糕的标记,我建议这样做:

包装你的usercontrol

<%@ 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与id="uniqueID" ->,这是你的第一个标签创建的用户控制。

我最后用了这个词:-增加了一个新的按钮,用户控制称之为错误的答案-在javascript一旦倒计时计时器结束-我为这个新按钮做了回发,即__doPostBack("InCorrectAnswer", ");

然后在用户控件中,我决定了当InCorrectAnswer被点击时要做什么…这基本上意味着完成这个过程。

相关内容

最新更新