无法在javascript中访问带有ClientIdMode =“static”的Asp.net Web表单用户控件

时间:2015-05-20 12:08:54

标签: asp.net webforms user-controls

我有一个在ASP.Net Web表单页面中使用的用户控件。在用户控件中,我设置了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>

2 个答案:

答案 0 :(得分:0)

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,如果你找到一个id =&#34的div; uniqueID&#34; - &GT;这是用户控件创建的第一个标记。

答案 1 :(得分:0)

我终于得到了这个词: - 为用户控件添加了一个新按钮,称为错误答案 - 一旦倒数计时器结束,在javascript中 - 我为这个新按钮做了回发,即__ doPostBack(&#34; InCorrectAnswer&#34;,&#34;&#34;);

然后在用户控件内部,我决定在点击InCorrectAnswer时要做什么...这基本上意味着最终完成该过程。

这对我有用。

相关问题