0

これらすべてのコンポーネントを正しく動作させるのに苦労していますが、js に到達すると、学生ページに TextBox コントロールが見つかりません。

MasterPage ScriptManager:

<body>
<form id="MainForm" runat="server">
    <asp:ScriptManager ID="ScriptManagerMain" runat="server">
        <Services>
            <asp:ServiceReference Path="~/AutoComplete.asmx" />
        </Services>
    </asp:ScriptManager>

マスターページ コンテンツプレースホルダー:

     <asp:ContentPlaceHolder ID="ContentPlaceHolderStudent" runat="server">
        </asp:ContentPlaceHolder>

学生(子供)ページ:

<asp:Content ID="Content" ContentPlaceHolderID="ContentPlaceHolderStudent" runat="server" >
<asp:UpdatePanel ID="StudentSearchPanel" runat="server" ViewStateMode="Inherit">
    <ContentTemplate>
        Search by student ID:
        <br />
            <asp:TextBox ID="StudentIDSearchTextBox" runat="server" OnTextChanged="StudentIDSearchTextBox_TextChanged" Wrap="False" MaxLength="6" ClientIDMode="Static"  ViewStateMode="Inherit"></asp:TextBox>                 
        <br />
                    <asp:Label ID="StudentIDEntryError" runat="server" Visible="false" Font-Bold="True" ForeColor="Red" Text="Please enter a 6-digit student ID number."></asp:Label>
        <br />                        
        Or, begin typing student last name:
        <br />
        <asp:TextBox ID="StudentNameSearchTextBox" runat="server" 
            CssClass="StudentNameSearch"
            ViewStateMode="Inherit"></asp:TextBox>

学生ページのオートコンプリート エクステンダー:

        <ajaxToolkit:AutoCompleteExtender ID="StudentNameSearchTextBox_AutoCompleteExtender" runat="server"
            TargetControlID="StudentNameSearchTextBox" 
            ServicePath="~/Scripts/AutoComplete.asmx"
            ServiceMethod="GetStudents"
            OnClientItemSelected="onStudentSelected" 
            MinimumPrefixLength="2" 
            CompletionSetCount="30" 
            UseContextKey="True" 
            CompletionListCssClass="autocomplete_completionListElement" 
            CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
            CompletionListItemCssClass="autocomplete_listItem" >
        </ajaxToolkit:AutoCompleteExtender>

AutoComplete.asmx は機能しているので、そのコードは追加しません。生徒の姓を入力し始めると、次のような json 応答が返されます (生徒のデータを保護するために変更されています)。私は FireBug からこれを取りました:

{"d":["{\"First\":\"Lisaaa, Abby E.\",\"Second\":\"610999\"}","{\"First\":\"Lisbbb, Bobby P.\",\"Second\":\"151999\"}","{\"First\":\"Lisccc, Cathy M.\",\"Second\":\"739999\"}","{\"First\":\"Lisddd, David L.\",\"Second\":\"496999\"}","{\"First\":\"Liseee, Emily C.\",\"Second\":\"701999\"}","{\"First\":\"Lisfff, Frank G.\",\"Second\":\"623999\"}"]}

GetStudentJson.js で OnClientItemSelected="onStudentSelected" に到達したときの問題:

function onStudentSelected(sender, e) {
    var selectedStudent = eval("(" + e._value + ")");
    var StudentIdTextbox = document.getElementById('<%=ContentPlaceHolderStudent_StudentIDSearchTextBox.ClientID %>');

    StudentIdTextbox.innerText = selectedStudent;
    __doPostBack(StudentIdTextbox, "");
}

StudentIdTextbox is Null というエラーが表示されます。ViewSourceにアクセスして、そのボックスを見つけて学生IDの値を与える方法を見つけて、すべてのレベルのプレースホルダーを追加しようとしましたが、役に立ちませんでした。実際には、次のようになります。

<input name="ctl00$ContentPlaceHolderStudent$StudentIDSearchTextBox" type="text" maxlength="6" id="StudentIDSearchTextBox" />

何かアドバイス??

4

1 に答える 1

0

問題がページのライフサイクルにあることを最終的に発見しました。マスター ページでスクリプトを参照する代わりに、スクリプト自体を子ページに移動しました。ここで、「FindControl」は実際に存在するコントロールを探しています。

<script type="text/javascript">
    function onStudentSelected(sender, e) {
        var selectedStudent = eval("(" + e._value + ")");
        var txtId = document.getElementById('<%= Page.Master.FindControl("ContentPlaceHolderStudent").FindControl("StudentSearchPanel").FindControl("StudentIDSearchTextBox").ClientID %>');
        txtId.value = selectedStudent;
    }
</script>

私は単にそのコントロールを見つけるのが早すぎたのです。

于 2013-02-07T22:59:58.587 に答える