これらすべてのコンポーネントを正しく動作させるのに苦労していますが、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" />
何かアドバイス??