2013-02-06 85 views
0

我一直在努力让所有这些组件正常工作,但是当我到达js时,它无法在学生页面上找到TextBox控件。AutoComplete with service and Masterpage

的母版页的ScriptManager:

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

母版页的ContentPlaceHolder:

 <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响应,如下所示(为了保护学生数据而进行了修改)。我把这个从萤火:

{"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\"}"]} 

的问题,当我到达OnClientItemSelected在GetStudentJson.js = “onStudentSelected”:

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

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

我得到一个错误StudentIdTextbox为空。我已经尝试添加所有级别的占位符,前往ViewSource找出如何找到该框,并给它的学生ID的价值,但无济于事。其实这里就是它的样子:

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

有什么建议?

回答

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> 

我只是试图尽快找到控制。